Подтвердить что ты не робот

Что означает блокировка WAIT_FOR_CONCURRENT_GC?

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

WAIT_FOR_CONCURRENT_GC blocked 30ms

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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