WAIT_FOR_CONCURRENT_GC blocked是什么意思?

23

我刚刚将我的安卓手机从ICS(4.0.4)自动更新到JB(4.1),并且在运行我的应用程序时引入了多个垃圾回收调用:

WAIT_FOR_CONCURRENT_GC blocked 30ms

我在我的应用程序中正在流式传输视频,这些被阻止的 GC 调用几乎使我的延迟翻了一倍,它们意味着什么?

2个回答

34

该信息在以下两种情况下被发出:

  • 当用户编写的代码显式调用gc(),而gc已经在进行中时。
  • 当代码尝试进行分配,但实际上内存中没有足够的空间来容纳该请求,并且gc已经在进行中。

无论哪种情况,为了满足请求,第一步是等待正在另一个线程中进行的热垃圾回收操作。一旦完成,线程就可以继续执行它更直接被要求执行的任务(这可能会导致进一步的垃圾回收)。

您可以在platform/dalvik/vm/alloc中找到相关源代码,尤其是Heap.cpp和Alloc.cpp。

话虽如此,我无法告诉您为什么在JB中看到的暂停比ICS中多。


如何解决这个问题?这会影响安卓应用的延迟吗?谢谢。 - Ishwor Khanal

18

在JB之前,我们没有记录这个时间。在进行垃圾回收时,您的应用程序线程必须始终阻塞等待任何并发GC完成,然后才能执行收集。但JB是第一个发布版本,您可以查看它们何时执行,并查看它们需要等待多长时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接