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

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

文章目录

    • @[toc]

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




    


创建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 todoList=new ArrayList<>();
    MyViewHolder myViewHolder;

    public ToDoListAdapter(List 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 dataList=new ArrayList();
    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写的一样。代码思想也一样。
使用Kotlin和java实现内存开销对比_第1张图片

###1.2内存消耗对比
这里我们使用android自带的Android profiler进行查看
使用java时的内存消耗
使用Kotlin和java实现内存开销对比_第2张图片

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

使用kotlin时的内存消耗
使用Kotlin和java实现内存开销对比_第3张图片

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

语言 内存开销
java 18.07
kotlin 21.04

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

语言 内存开销(第一次) 内存开销(第二次) 内存开销(第三次)
java 16.54 18.36 18.4
kotlin 19.81 17.88 19.92

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

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

你可能感兴趣的:(android学习记录)