使用Kotlin和java实现内存开销对比

#使用Kotlin和java实现内存开销对比

文章目录

##前言
前几天学习了一下kotlin,实现了listview,突发奇想,使用java编写一样的代码,它们的内存消耗,谁的多?带着这个问题编写了2套代码。使用kotlin实现的listview,这里就不在详述了,可以查看我的上一篇博客Kotlin学习之ListView,使用java编写的,我会放在下面作为参考。
##一、使用listview时内存消耗对比
###1.1java实现的listview
我们创建一个名为activity_main.xml,里面放一个listview控件,id为lvTodo

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.MainActivity">

    <ListView
        android:id="@+id/lvTodo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

创建ListView的adapter

这里我们自定义一个名为ToDoListAdapter的adapter,继承BaseAdapter

package com.fm.testandroid.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.fm.testandroid.R;

import java.util.ArrayList;
import java.util.List;

/**
 * @author:fangming
 * @date:Created on 2018/9/4
 * @description:
 */

public class ToDoListAdapter extends BaseAdapter {
    Context mContext;
    List<String> todoList=new ArrayList<>();
    MyViewHolder myViewHolder;

    public ToDoListAdapter(List<String> todoList,Context mContext) {
        this.mContext = mContext;
        this.todoList = todoList;
    }

    @Override
    public int getCount() {
        return todoList!=null?todoList.size():0;
    }

    @Override
    public Object getItem(int position) {
        return todoList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        String item = todoList.get(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.todolist_item, null);
            myViewHolder = new MyViewHolder(convertView);
            convertView.setTag(myViewHolder);
        } else {
            myViewHolder = (MyViewHolder) convertView.getTag();
        }
        myViewHolder.mContentTv.setText(item);
        return convertView;
    }

    class MyViewHolder{
        TextView mContentTv;

        MyViewHolder(View view){
            this.mContentTv=view.findViewById(R.id.mContentTv);
        }
    }
}


在mainactivity中设置listview的adapter

package com.fm.testandroid.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import com.fm.testandroid.R;
import com.fm.testandroid.adapter.ToDoListAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    List<String> dataList=new ArrayList<String>();
    ToDoListAdapter mAdapter=null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();

    }

    private void initData(){
        ListView lvTodo=(ListView) findViewById(R.id.lvTodo);
        for (int i = 0; i <=10; i++) {
            dataList.add("hello");
        }
        mAdapter=new ToDoListAdapter(dataList,this.getBaseContext());
        lvTodo.setAdapter(mAdapter);
    }
}

运行一下,界面如下,和kotlin写的一样。代码思想也一样。
这里写图片描述

###1.2内存消耗对比
这里我们使用android自带的Android profiler进行查看
使用java时的内存消耗
这里写图片描述

这里可以看到使用java时内存消耗大概在18.07左右

使用kotlin时的内存消耗
这里写图片描述

这里可以看到使用kotlin时,内存消耗在21.04左右

语言内存开销
java18.07
kotlin21.04

从以上对比,可以看出kotlin在运行时,内存消耗要比java的高一点。
##二、编写helloworld进行对比
这里还有一点疑问,kotlin加了一个anko的插件包。我去掉kotlin的插件包,使用java和kotlin分别编写了一个TextView显示hello的程序,再次运行对比。这里就不展示代码了,比较简单。

语言内存开销(第一次)内存开销(第二次)内存开销(第三次)
java16.5418.3618.4
kotlin19.8117.8819.92

从以上对比,可以看出kotlin在运行时内存消耗和java的有时高,有时低,有时高,和手机当前的环境有关。总体相差不大。

##三、总结
通过以上的一些实验对比,kotlin运行时内存消耗和java的消耗相差不多。不得不承认kotlin确实挺优秀的。期待它的进一步发展。对于android开发者来说,用哪个都可以。java也好,kotlin也好。只要思想不变就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值