当我正在研究各种移动平台的共性/差异时,正在研究的一个方面是内存管理。因此,我对各种机制的更详细的技术信息感兴趣。
具体而言,例如 Android使用哪种垃圾收集器类型?
([Google Groups Discussion]表明它正在使用“追踪”机制 - 但我很欣赏我可以引用的“更官方”来源,并希望在那里找到信息该类型可能对其产生的影响程序员)。
我的问题中还有以何种方式调整Android 3.0(Honeycomb)中的GC以专门使用多个处理器? [Android Devevelopers Guide]建议
Android 3.0是该平台的第一个版本,旨在在单核或多核处理器架构上运行。 Dalvik VM,Bionic库和其他地方的各种变化增加了对多核环境中对称多处理的支持。这些优化可以使所有应用程序受益,即使是那些单线程的应用程序。例如,如果Dalvik垃圾收集器在第二个核心上运行,则使用两个活动核心,单线程应用程序可能仍会看到性能提升。系统会自动安排。“
和以前一样,我宁愿找一个有更多技术信息的来源来阅读。再次,对开发人员的影响(除了明显可以提高性能之外)?
赞赏任何此类意见。
谢谢!
答案 0 :(得分:26)
要回答您的一个问题,Dalvik VM确实使用跟踪垃圾收集器,使用Mark and Sweep方法。
根据The Dalvik Virtual Machine Architecture:
Dalvik垃圾收集器的当前策略是保留标记位, 或指示特定对象“可达”的位 因此不应该被垃圾收集,与其他堆内存分开。
从Android 5.0(Lollipop)开始,Dalvik被Android Runtime (ART)取代。
谷歌有以下说明从Dalvik到ART (source)的垃圾收集器的变化:
改进垃圾收集
垃圾收集(GC)会影响应用的性能,从而导致 显示不稳定,UI响应能力差以及其他问题。艺术 通过以下几种方式改进垃圾收集:
- 一次GC暂停,而不是两次
- 剩余GC暂停期间的并行处理
- 具有较低GC总时间的收集器,用于清理最近分配的短期对象的特殊情况
- 改进了垃圾收集人机工程学,使并发垃圾收集更加及时,这使得GC_FOR_ALLOC事件极为严重 在典型的用例中很少见 压缩GC以减少后台内存使用和碎片
另见: