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

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

WAIT_FOR_CONCURRENT_GC blocked 30ms

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


person Dirk    schedule 17.07.2012    source источник


Ответы (2)


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

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

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

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

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

person danfuzz    schedule 18.07.2012
comment
Какое решение, чтобы преодолеть это? Стоит ли задержка приложения для Android? Спасибо - person Ishwor Khanal; 31.12.2018

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

person Elliott Hughes    schedule 31.07.2012