我刚刚将我的安卓手机从ICS(4.0.4)自动更新到JB(4.1),并且在运行我的应用程序时引入了多个垃圾回收调用:
WAIT_FOR_CONCURRENT_GC blocked 30ms
我在我的应用程序中正在流式传输视频,这些被阻止的 GC 调用几乎使我的延迟翻了一倍,它们意味着什么?
我刚刚将我的安卓手机从ICS(4.0.4)自动更新到JB(4.1),并且在运行我的应用程序时引入了多个垃圾回收调用:
WAIT_FOR_CONCURRENT_GC blocked 30ms
我在我的应用程序中正在流式传输视频,这些被阻止的 GC 调用几乎使我的延迟翻了一倍,它们意味着什么?
该信息在以下两种情况下被发出:
无论哪种情况,为了满足请求,第一步是等待正在另一个线程中进行的热垃圾回收操作。一旦完成,线程就可以继续执行它更直接被要求执行的任务(这可能会导致进一步的垃圾回收)。
您可以在platform/dalvik/vm/alloc中找到相关源代码,尤其是Heap.cpp和Alloc.cpp。
话虽如此,我无法告诉您为什么在JB中看到的暂停比ICS中多。
在JB之前,我们没有记录这个时间。在进行垃圾回收时,您的应用程序线程必须始终阻塞等待任何并发GC完成,然后才能执行收集。但JB是第一个发布版本,您可以查看它们何时执行,并查看它们需要等待多长时间。