WAIT_FOR_CONCURRENT_GC阻止了什么意思?

时间:2012-07-17 22:17:22

标签: android garbage-collection dalvik blocked

我刚刚在我的Android手机上从ICS(4.0.4)到JB(4.1)进行了自动更新,当我运行我的应用程序时它引入了多个垃圾收集调用:

WAIT_FOR_CONCURRENT_GC blocked 30ms

我正在我的应用中播放视频,这些阻止的GC调用几乎使我的延迟倍增,这是什么意思?

2 个答案:

答案 0 :(得分:32)

在几种情况下会发出该消息:

  • 当用户代码显式调用gc()时,gc已在进行中。
  • 当代码尝试进行分配但内存中没有空间来容纳请求时,gc已在进行中。

在任何一种情况下,发生的事情是,为了满足请求,第一步是等待在另一个线程中发生的热垃圾收集操作。一旦完成,那么线程可以转移到更直接要求做的事情(这可能导致进一步的垃圾收集)。

你可以在platform / dalvik / vm / alloc中找到显着的来源,特别是Heap.cpp和Alloc.cpp。

所有这一切,我不能告诉你为什么你在JB看到比ICS更多的停顿。

答案 1 :(得分:17)

我们没有在JB之前记录这次。您的应用程序的线程总是必须阻止等待任何并发GC完成才能进行收集,但JB是第一个可以看到它们何时发布的版本,以及您可以在哪里看到它们需要等待多长时间。 / p>