【问题标题】:How to measure class memory size on Dalvik JVM?如何测量 Dalvik JVM 上的类内存大小?
【发布时间】:2015-04-13 07:44:16
【问题描述】:

阅读'Managing You App's Memory' 文章后,我开始通过编写“干净代码”来研究内存影响。我的意思是,例如,有一个责任的小类,面向接口的编程,做一件事的方法等。

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

我猜想在创建 dex 时,或者在构建版本时由 proguard 或通过类加载器进行一些优化,但是我对这个主题相当陌生。

非常感谢任何解释 Dalvik 记忆模型的文献的良好链接

【问题讨论】:

标签: android memory-management dalvik


【解决方案1】:

每个类都有固定的类定义开销,加上每个方法和字段的几个字节,以及静态字段的一些存储。您可以在 Dalvik 源代码 (struct ClassObject) 中查看结构。

您确实为每个类、字段和方法支付了少量成本,因此如果您用一个巨大的方法编写整个程序,您将节省一些空间。这不是一个好主意。 (一些代码优化器/混淆器程序会做这样的事情,生成大型复杂的 switch 语句。)

应用程序的开销很难衡量,因为在 Dalvik 中,大部分开销都位于本机堆或“线性分配”区域(Facebook 必须达到hack around 的限制)。中间 .class 文件的大小完全没有代表性。 .dex 文件的大小也不是非常有用,因为其中大部分都存在于内存映射 RAM 中,与“脏” RAM 相比,它对系统的负担更小(有关内存使用情况,请参阅 hackbod's post)。

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

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

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 2010-12-02
    • 1970-01-01
    • 2019-10-31
    • 2016-07-18
    • 1970-01-01
    • 2011-04-25
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多