Одна из рекламируемых функций ART runtime в Android 5.0+ - это сжатие кучи, чтобы уменьшить фрагментацию кучи. Фрагментированная куча может получить OutOfMemoryErrors
намного проще, так как может быть не один непрерывный свободный блок памяти, достаточно большой для ваших нужд, даже если куча в целом имеет достаточно свободного места.В каких условиях АРТ Компакт-куча?
Я понимаю, что это происходит, когда приложение перемещается на задний план на основе презентаций конференции Google и т.п. Однако, единственное утверждение, что я могу найти на него в the documentation говорит:
Однородная пространство уплотнению свободно-список пространства для списка свободного пространства уплотнению, которое обычно происходит, когда приложение перемещается в состояние паузы незаметного процесса. Основными причинами этого являются сокращение использования ОЗУ и дефрагментация кучи.
Непонятно, что означает «пауза незаметного состояния процесса», технически.
Предположим, у приложения нет активных действий на переднем плане. Есть ли что-то, что мог сделать разработчик, что может помешать сжатию кучи для процесса этого приложения? Например, имеет ли уплотнение кучи служебного блока переднего плана?
Просто проверьте, что вы прочитали https://source.android.com/devices/tech/dalvik/gc-debug.html, где говорится о «уплотнении кучи». В настоящее время событие, которое вызывает уплотнение кучи, Изменения состояния процесса ActivityManager. Когда приложение переходит на задний план, оно уведомляет ART о том, что состояние процесса больше не «подхвачено». « –
@MorrisonChang: Нет, я пропустил эту страницу - спасибо! Это помогает, но я не знаю, как интерпретировать «приложение переходит на задний план». Если это буквально ссылается на ['IMPORTANCE_BACKGROUND'] (https://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html#IMPORTANCE_BACKGROUND), то даже наличие запущенной службы может блокировать сжатие кучи. – CommonsWare
похоже, что вы просто хотели быть уверены. возникли ли у вас какие-либо проблемы со службами, связанными с фоновыми заданиями? было бы здорово, если бы вы столкнулись с проблемой, связанной с производительностью. и об услугах они имеют низкий приоритет по сравнению с задачами переднего плана, и они были с тех пор, как с самого начала, как ваш сервис будет убит или заблокирован, когда телефон будет закрыт в памяти. копать глубоко, вы можете прочитать о липких CMS и графе объектов, поможет –