Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何测量Dalvik JVM上的类内存大小?_Android_Memory Management_Dalvik - Fatal编程技术网

Android 如何测量Dalvik JVM上的类内存大小?

Android 如何测量Dalvik JVM上的类内存大小?,android,memory-management,dalvik,Android,Memory Management,Dalvik,读完这篇文章后,我开始通过编写“干净的代码”来研究内存含义。我的意思是说,例如,只有一个职责的小类、面向接口的编程、只做一件事的方法等等 然而,我不知道如何获得一个类或接口的二进制表示在Dalvik JVM中实际占用的空间的实际读数。我目前正在查看intermediates文件夹中编译类的字节大小。在这里我可以看到,不是一个大方法做3件事,而是3个不同的方法实际上增加了大约100个字节问题:这项措施有效吗? 我猜在创建dex时,或者由proguard在构建发行版时,或者由classloader进

读完这篇文章后,我开始通过编写“干净的代码”来研究内存含义。我的意思是说,例如,只有一个职责的小类、面向接口的编程、只做一件事的方法等等

然而,我不知道如何获得一个类或接口的二进制表示在Dalvik JVM中实际占用的空间的实际读数。我目前正在查看intermediates文件夹中编译类的字节大小。在这里我可以看到,不是一个大方法做3件事,而是3个不同的方法实际上增加了大约100个字节问题:这项措施有效吗?

我猜在创建dex时,或者由proguard在构建发行版时,或者由classloader进行优化,但是我对这个主题还是比较陌生的


非常感谢与解释Dalvik内存模型的文献的任何良好链接

每个类都有固定的类定义开销,每个方法和字段都有几个字节,静态字段也有一些存储空间。您可以在Dalvik sources()中看到该结构

您确实为每个类、字段和方法支付了少量的成本,因此,如果您用一个巨大的方法编写整个程序,您将节省一些空间。这不是一个好主意。(一些代码优化器/模糊处理程序将执行类似操作,生成大型复杂的switch语句。)

应用程序的开销很难测量,因为在Dalvik中,大部分开销存在于本机堆或“线性alloc”区域(Facebook必须达到的限制)。中间.class文件的大小根本不具有代表性。.dex文件的大小也不是非常有用,因为大部分文件都存在于内存映射RAM中,这对系统来说比“脏”RAM的负担要小(请参阅关于内存使用)

我能提供的最好建议是编写易于维护的代码,而不必过分担心细节。如果您将每一行代码都放在自己的类中,您可能会遇到麻烦,但如果您走到那种极端,代码无论如何都很难维护

现代应用程序的大部分内存成本都与图形有关,因为显示器越来越大、越来越密集,而不是因为编码风格或数量。Facebook为使其超大应用程序正常运行而采取的一项措施是将姜饼设备上的VM缓冲区大小从5MB增加到8MB,这与应用程序的其他需求相比是微不足道的。

请参阅Android MAT(内存分析工具)