2012-07-17 3 views
19

Я просто сделал автоматическое обновление с ICS (4.0.4) в JB (4.1) на мой андроид телефон, и он ввел несколько вызовов для сбора мусора, когда я бегу мое приложение:что означает блокировка WAIT_FOR_CONCURRENT_GC?

WAIT_FOR_CONCURRENT_GC blocked 30ms 

Я потоковое видео в мое приложение и эти заблокированные вызовы GC почти удваивают мою задержку, что они означают?

ответ

31

Это сообщение излучается в нескольких случаях:

  • когда код пользователя явно вызывает дс(), а дс уже идет.
  • , когда код пытается выполнить выделение, но на самом деле нет места в памяти для размещения запроса, а gc уже выполняется.

В любом случае, что происходит, так это то, что для удовлетворения запроса первый шаг ожидает действия по сбору горячего мусора, которое происходит в другом потоке. Как только это будет сделано, поток может переместиться на то, что было более прямо запрошено (что может вызвать дополнительную сборку мусора).

Вы можете найти основные источники в платформе/dalvik/vm/alloc, особенно Heap.cpp и Alloc.cpp.

Все, что сказал, я не могу сказать вам, почему вы видите больше пауз в JB, чем в ICS.

+0

Я отправил вам электронное письмо по адресу вашего веб-сайта, но я не уверен, что вы его получили, не могли бы вы его проверить? –

17

Мы не регистрировались на этот раз до JB. В потоках вашего приложения всегда приходилось блокировать ожидание выполнения любого параллельного GC, прежде чем они смогут сделать коллекцию, но JB - это первый выпуск, в котором вы можете видеть, когда они это делают, и где вы можете видеть, сколько времени им нужно ждать.

Смежные вопросы