WAIT_FOR_CONCURRENT_GC阻止了什么意思?

Dir*_*irk 21 android garbage-collection blocked dalvik

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

WAIT_FOR_CONCURRENT_GC blocked 30ms
Run Code Online (Sandbox Code Playgroud)

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

dan*_*uzz 32

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

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

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

您可以在platform/dalvik/vm/alloc中找到显着的来源,尤其是Heap.cpp和Alloc.cpp.

总而言之,我不能告诉你为什么你在JB看到比ICS更多的停顿.


Ell*_*hes 17

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