我刚刚在我的Android手机上从ICS(4.0.4)到JB(4.1)进行了自动更新,当我运行我的应用程序时它引入了多个垃圾收集调用:
WAIT_FOR_CONCURRENT_GC blocked 30ms
我正在我的应用中播放视频,这些阻止的GC调用几乎使我的延迟倍增,这是什么意思?
答案 0 :(得分:32)
在几种情况下会发出该消息:
在任何一种情况下,发生的事情是,为了满足请求,第一步是等待在另一个线程中发生的热垃圾收集操作。一旦完成,那么线程可以转移到更直接要求做的事情(这可能导致进一步的垃圾收集)。
你可以在platform / dalvik / vm / alloc中找到显着的来源,特别是Heap.cpp和Alloc.cpp。
所有这一切,我不能告诉你为什么你在JB看到比ICS更多的停顿。
答案 1 :(得分:17)
我们没有在JB之前记录这次。您的应用程序的线程总是必须阻止等待任何并发GC完成才能进行收集,但JB是第一个可以看到它们何时发布的版本,以及您可以在哪里看到它们需要等待多长时间。 / p>