为什么ART虚拟机会消耗更多的内存

今天听到消息说,Google正式放弃Dalvik的维护工作。尽管Google之前已经透露了Android新一代虚拟机ART的计划,Dalvik维护工作停止的消息还是让我感到兴奋。毕竟,年老Dalvik的已经不适应移动设备的需求——解释执行的效率(包括Just-in-time)以及垃圾收集带来的动画卡滞等问题都饱受诟病。新一代虚拟机ART正在试图解决这些问题。通过Google AOSP释放出来的代码,我们能够看到ART的雏形,也看到Google持续改进的步伐。我更关注ART的内存管理设计,因为这部分内容和Android应用开发、Framework开发密切相关,作为一位优秀的Android程序员应该了解这方面的知识。今天的话题是ART虚拟机的内存消耗。

一些Android开发人员已经注意到,同一款应用在ART上运行比在Dalvik上更耗资源。内存消耗过大轻则影响性能,重则影响稳定性,如OOM导致的程序崩溃。一些在Dalvik上运行良好的程序在ART上可能导致很差的用户体验,Android程序员需要解决这些遗留问题。当我们试图解决问题之前,我们需要先了解问题的根源。

Dalvik诞生于设备内存较小的时代,为了抑制Heap过快增长,它采用了尽可能多触发GC的策略。这些频繁触发的GC大部分是GC_FOR_ALLOC(STW类型的GC,运行时应用所有线程都要停下来),从而让用户感受到动画卡滞。ART采取的策略是空间换时间,放宽Heap增长的限制,尽可能减少STW-GC。此外,由于ART默认的GC是CMS,Heap碎片问题进一步加剧了内存的消耗。因此,从理论上来讲ART虚拟机消耗更多内存的问题目前无解——除非Google调整策略(个人认为几乎没有可能),抑或是Google提供新的GC算法在时间和空间之间寻找更好的平衡点。通过Google近期 的AOSP代码更新可以了解到,Google在试图引入一种compact-GC来抑制Heap中碎片。

在内存消耗问题上,除了期盼Google的改进,应用开发人员难道就束手无策么?当然不是。通过进一步了解ART的GC设计细节,我们可以调整应用对象分配的行为,从而让GC更高效的工作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值