Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android垃圾收集器的技术细节_Android_Multithreading_Garbage Collection_Android 3.0 Honeycomb - Fatal编程技术网

Android垃圾收集器的技术细节

Android垃圾收集器的技术细节,android,multithreading,garbage-collection,android-3.0-honeycomb,Android,Multithreading,Garbage Collection,Android 3.0 Honeycomb,当我在研究各种移动平台的共性/差异时,正在研究的一个方面是内存管理。因此,我对各种机制的更详细的技术信息感兴趣 具体来说,例如安卓使用哪种垃圾收集器类型? (表明它使用的是“跟踪”机制——但我希望能引用一个“更正式”的源代码,并希望在那里找到该类型可能对程序员有影响的信息) 我的问题之一是,安卓3.0(蜂巢)中的GC是如何专门调整以利用多处理器的? [Android开发者指南]建议 Android 3.0是该平台的第一个版本,设计用于单核或多核处理器架构。Dalvik VM、Bionic库和其他

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

具体来说,例如安卓使用哪种垃圾收集器类型?
(表明它使用的是“跟踪”机制——但我希望能引用一个“更正式”的源代码,并希望在那里找到该类型可能对程序员有影响的信息)

我的问题之一是,安卓3.0(蜂巢)中的GC是如何专门调整以利用多处理器的?
[Android开发者指南]建议

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

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

任何这样的投入都是值得赞赏的


谢谢!

为了回答您的一个问题,确实使用了跟踪垃圾收集器,使用了一种方法

根据:

Dalvik垃圾收集器的当前策略是保留标记位, 或表示特定对象“可访问”的位,以及 因此,不应将其与其他堆内存分开进行垃圾收集

从Android 5.0(棒棒糖)开始,Dalvik被替换为

关于垃圾收集器从Dalvik到ART()的变化,Google有如下说法:

改进的垃圾收集 垃圾收集(GC)会影响应用程序的性能,导致 显示不稳定、UI响应性差以及其他问题 通过以下几种方式改进垃圾收集:

  • 一次GC暂停而不是两次
  • 剩余GC暂停期间的并行处理
  • 收集器具有较低的总GC时间,用于清理最近分配的短期对象的特殊情况
  • 改进的垃圾收集工效学,使并发垃圾收集更加及时,这使得GC_FOR_ALLOC事件变得极其复杂 在典型用例中很少见 压缩GC以减少后台内存使用和碎片
另见:


我从您的精彩链接中了解到,“标记和扫描方法的主要缺点是,当垃圾收集算法运行时,正常的程序执行会暂停。特别是,在与人类用户交互或必须满足实时执行约束的程序中,这可能是一个问题。例如,使用mark and sweep垃圾收集的交互式应用程序会定期失去响应。“如果能找到有关Honeycomb对多处理器的支持如何以及在多大程度上缓解这一缺点的技术细节,我会很感兴趣!?因此堆空间之间不涉及任何复制(例如,从伊甸园空间到其他空间?)i.o.w.Android的GC不使用任何形式的代际/统计收集策略?查看源代码,我看到它的标记为白色、黑色和灰色,因此它似乎是三色标记。@mr.icetea:这篇文章已经更新,既修复了Dalvik链接,又包含了对当前Android运行时ART的评论。