就是Android的垃圾收集器暂停其他应用程序运行时?(Is Android garbage col

2019-08-16 22:28发布

我发现关于Android的垃圾收集器是矛盾,我的一些信息。

Android的Devevelopers指南说:

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

好了,现在其他的事情

根据此链接: 在Dalvik虚拟机架构 Android使用标记和清除的形式给出。

在Dalvik的垃圾收集器的当前策略是保持标记比特,或指示特定对象是“可达”的位,并因此不应被垃圾收集,从其他堆内存分开。

如果我们检查标记和清除是如何工作的此链接: 标记和清扫垃圾收集算法 ,我们可以看到这一点:

标记和清除方法的主要缺点是,虽然垃圾收集算法运行正常的程序执行暂停的事实。 特别地,这可以是在程序中的问题,即与人类用户交互或必须满足实时执行约束。 例如,使用标记 - 清除垃圾收集的交互式应用程序变得无法响应周期性。

所以,我现在的问题是,它是如何真的有效吗? 垃圾回收器暂停一切,而他的工作,或者是他能够运行完全独立于其他活动的处理器核心的?

Answer 1:

Dalvik虚拟机在姜饼及以后版本使用与暂停时间通常在5毫秒大多并发局部收集垃圾收集器。 所以,是的,GC是阻止他们影响其他应用程序,但并发GC算法能够minimaze这些暂停。

你应该看看:

  • Android的垃圾收集器的技术细节
  • 是否DalvikVM垃圾收集停止整个VM?

一般情况下,垃圾收集理论[垃圾收集维基]解释:

  • 停止这世界的垃圾收集器完全停止执行程序运行收集周期

  • 增量和并发垃圾收集器的设计由主程序交错他们与活动工作,以减少这种破坏。 增量垃圾收集器在离散相位执行垃圾收集周期,每个相之间允许程序执行(并且有时在某些阶段)。

  • 当程序的执行堆栈被扫描并发垃圾收集器完全不停止执行程序,也许除了简要介绍。


Answer 2:

完全独立是不可能的,而:垃圾收集器和程序使用相同的内存,并必须以某种方式沟通。 即使是“pauseless” GCS,像Azul的(顺便说一句,一个良好的阅读: http://www.artima.com/lejava/articles/azul_pauseless_gc.html ),有技术暂停。 Dalvik的可能是(纯猜测,基于传闻证据和IBM,Sun和甲骨文的同类在过去15年中有可能注入的JVM资源岁)在JVM中找到最新的技术落后,所以我怀疑是暂停会更长。



Answer 3:

它不会暂停其他应用程序,它可能会暂停您的应用程序。 一个标记和清除不必停止所有的处理,它只是做最简单的方法。 它可能有一些点,它在它不暂停执行等。 唯一真正的方式来告诉是看Dalvik虚拟机代码。 我不会指望它是Android中的所有版本相同的回答。



文章来源: Is Android garbage collector pausing other apps while running?