我发现一些关于 Android 垃圾收集器的信息与我矛盾。
Android 开发者指南 说道:
Android 3.0 是该平台的第一个版本,旨在运行于
单核或多核处理器架构。各种各样
Dalvik VM、Bionic 库和其他地方的更改增加了支持
用于多核环境中的对称多处理。这些
优化可以使所有应用程序受益,甚至是那些
单线程。例如,有两个活动核心,一个单线程
如果 Dalvik 垃圾处理应用程序仍可能会看到性能提升
收集器在第二个核心上运行。系统会对此进行安排
自动地。”
好吧,现在是另一件事
根据这个链接:Dalvik 虚拟机架构 http://davidehringer.com/software/android/The_Dalvik_Virtual_Machine.pdfandroid 使用标记和清除方法。
Dalvik 垃圾收集器当前的策略是保留标记
位,或指示特定对象的位
“可达”,因此不应被垃圾收集,单独
来自其他堆内存。
如果我们检查标记和清除在此链接上的工作原理:标记和清除垃圾收集算法 http://www.brpreiss.com/books/opus5/html/page424.html,我们可以看到:
标记和清除方法的主要缺点是
正常程序执行被暂停,而垃圾
收集算法运行。特别是,这可能是一个问题
与人类用户交互或必须满足的程序
实时执行约束。例如,一个交互式的
使用标记和清除垃圾收集的应用程序变成
周期性无反应。
所以我现在的问题是,它到底是如何运作的?垃圾收集器在工作时是否会暂停一切,或者他是否能够完全独立于其他活动处理器核心运行?
Dalvik 虚拟机位于姜饼及其他版本正在使用大部分是并发部分收集垃圾收集器的暂停时间通常在 5 毫秒左右。因此,是的,GC 正在通过停止其他应用程序来影响它们,但并发 GC 算法能够最大限度地减少这些暂停。
你应该看看:
- Android 垃圾收集器的技术细节 https://stackoverflow.com/q/4818869/772000
- DalvikVM 垃圾收集器是否会停止整个虚拟机? https://stackoverflow.com/q/13657904/772000
一般来说,垃圾收集理论[垃圾收集维基] http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Stop-the-world_vs._incremental_vs._concurrent解释:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)