Android垃圾收集器的技术细节

时间:2011-01-27 16:18:01

标签: android multithreading garbage-collection android-3.0-honeycomb

当我正在研究各种移动平台的共性/差异时,正在研究的一个方面是内存管理。因此,我对各种机制的更详细的技术信息感兴趣。

具体而言,例如 Android使用哪种垃圾收集器类型
[Google Groups Discussion]表明它正在使用“追踪”机制 - 但我很欣赏我可以引用的“更官方”来源,并希望在那里找到信息该类型可能对其产生的影响程序员)。

我的问题中还有以何种方式调整Android 3.0(Honeycomb)中的GC以专门使用多个处理器? [Android Devevelopers Guide]建议

  

Android 3.0是该平台的第一个版本,旨在在单核或多核处理器架构上运行。 Dalvik VM,Bionic库和其他地方的各种变化增加了对多核环境中对称多处理的支持。这些优化可以使所有应用程序受益,即使是那些单线程的应用程序。例如,如果Dalvik垃圾收集器在第二个核心上运行,则使用两个活动核心,单线程应用程序可能仍会看到性能提升。系统会自动安排。“

和以前一样,我宁愿找一个有更多技术信息的来源来阅读。再次,对开发人员的影响(除了明显可以提高性能之外)?

赞赏任何此类意见。

谢谢!

1 个答案:

答案 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以减少后台内存使用和碎片
  •   

另见: