22

AndroidフォンでICS(4.0.4)からJB(4.1)に自動更新したところ、アプリを実行すると複数のガベージコレクション呼び出しが発生しました。

WAIT_FOR_CONCURRENT_GC blocked 30ms

アプリでビデオをストリーミングしていますが、これらのブロックされたGC呼び出しにより、レイテンシーがほぼ2倍になります。どういう意味ですか?

4

2 に答える 2

33

そのメッセージは、いくつかの場合に発行されます。

  • ユーザーコードが明示的にgc()を呼び出し、gcがすでに進行中の場合。
  • コードが割り当てを行おうとしたが、実際には要求に対応するためのスペースがメモリになく、gcがすでに進行中の場合。

いずれの場合も、要求を満たすために、最初のステップは別のスレッドで実行されているホットガベージコレクションアクションを待機しているということです。それが完了すると、スレッドはより直接要求された処理に進むことができます(これによりさらにガベージコレクションが発生する可能性があります)。

顕著なソースは、platform / dalvik / vm / alloc、特にHeap.cppとAlloc.cppにあります。

とはいえ、ICSよりもJBの方が一時停止が多い理由はわかりません。

于 2012-07-18T20:05:00.623 に答える
17

今回はJBの前にログに記録しませんでした。アプリのスレッドは、コレクションを実行する前に、同時GCが完了するのを常にブロックする必要がありましたが、JBは、コレクションを実行するタイミングと、待機する必要がある時間を確認できる最初のリリースです。

于 2012-07-31T16:28:11.137 に答える