Android垃圾收集器的技术细节
在研究各种移动平台的共性/差异时,调查的一个方面就是内存pipe理。 因此,我对有关各种机制的更详细的技术信息感兴趣。
具体来说,例如Android使用哪种垃圾收集器types ?
( [Google Groups Discussion]]build议它使用“追踪”机制 – 但是我会欣赏一个我可以引用的“更官方”的源代码,并且希望能find那些types可能对程序员有用的信息。
在我的问题之中,Android 3.0(Honeycomb)中的GC是如何针对多个处理器进行调整的 ?
[Android开发者指南]build议
Android 3.0是该平台的第一个版本,可以在单核或多核处理器架构上运行。 Dalvik虚拟机,仿生库和其他地方的各种变化增加了对多核环境中对称多处理的支持。 这些优化可以使所有的应用程序都受益,甚至是那些单线程的应用程序。 例如,对于两个活动内核,如果Dalvik垃圾收集器在第二个内核上运行,单线程应用程序仍然可以提高性能。 系统会自动安排。“
和以前一样,我宁愿find一个有更多技术信息的来源阅读。 再一次, 对开发人员有什么影响 (除了显而易见的是希望提高性能)?
任何这样的input表示赞赏。
谢谢!
为了回答你的一个问题, Dalvik虚拟机的确使用跟踪垃圾收集器,使用Mark和Sweep方法。
根据Dalvik虚拟机架构 :
Dalvik垃圾回收器中的当前策略是保留标记位,或指示特定对象“可到达”的位,因此不应被垃圾收集,与其他堆内存分离。
从Android 5.0(Lollipop)开始,Dalvik被Android Runtime(ART)取代。
谷歌有以下说Dalvik垃圾收集器到ART ( 源 )的变化 :
改进垃圾收集
垃圾收集(GC)可能会损害应用程序的性能,导致显示波动,UI响应性差以及其他问题。 ART以几种方式改善垃圾收集:
- 一个GC暂停而不是两个
- 在剩余的GC暂停期间并行处理
- 收集器具有较低的GC时间,用于清理最近分配的短期物体的特殊情况
- 改进了垃圾收集人体工程学devise,使并发垃圾收集更加及时,这使GC_FOR_ALLOC事件在典型的用例中变得极为罕见压缩GC以减less后台内存使用和碎片
也可以看看:
- Dalvik垃圾收集器的源代码
- ART垃圾收集器的源代码