web-dev-qa-db-ja.com

ブロックされたWAIT_FOR_CONCURRENT_GCはどういう意味ですか?

ICS電話でAndroid(4.0.4)からJB(4.1)に自動更新しましたが、実行時に複数のガベージコレクション呼び出しが発生しました私のアプリ:

WAIT_FOR_CONCURRENT_GC blocked 30ms

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

22
Dirk

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

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

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

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

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

33
danfuzz

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

17
Elliott Hughes