Intereting Posts
Android DeadSystemException Пример программы sqlite в android Android ScrollView может содержать только один прямой дочерний Хороший подход к повторным запросам вручную в Retrofit Android Как узнать строку user-agent для определенных устройств Android? Как указать пользовательский агент по умолчанию для запросов okhttp 2.x Android: веб-приложение работает в Chrome, но не в Webview Дизайн материалов Прозрачный ActionBar Не удалось выполнить сборку с использованием распределения Gradle 'http://services.gradle.org/distributions/gradle-1.6-bin.zip' Тестирование Android-модуля с использованием проекта ant с библиотекой Кордова, Android, невероятно медленная загрузка Как обрабатывать сообщения обработчика, когда действие / фрагмент приостановлено Метод onClick не работает должным образом после прокрутки NestedScrollView Класс приложения работает в потоке пользовательского интерфейса или? Как создать круговой индикатор выполнения (круговая диаграмма), как индикатор – Android

Android-сборщик мусора Освобожденная память

Я работаю над приложением, которое обрабатывает множество ассигнований (порядка 4 млн. Удваивается и миллион классов). Я просматривал журналы сборщиков мусора, и я вижу, что разное количество памяти освобождается на разных устройствах.

Например, у меня есть Moto X (2014), который заканчивается освобождением чуть более 312 МБ. У меня также есть Droid Bionic, который запускает тот же код с теми же данными, что в среднем составляет 616 МБ. Оба устройства имеют размер кучи около 50 МБ.

Почему так много памяти освобождается GC на Bionic, чем Moto X? Они должны генерировать столько же мусора каждый. Что происходит за кулисами в сборщике мусора? Moto X находится на Android 5.1, а Bionic – на 4.1.2.

Изменить: у меня есть четыре устройства, которые освобождают около 300 МБ ОЗУ: Moto X (2014), Nexus 7 2013, Nexus 7 2012 и Razr i. Все четыре из них используют АРТ. Bionic работает во время работы Dalvik. Разве это меньше освобождает? Я заметил, что GC_FOR_ALLOC не происходит в ART, но все время звонит в Dalvik.

Solutions Collecting From Web of "Android-сборщик мусора Освобожденная память"

Цитата из этого сообщения:

Затем команда ART работала над оптимизацией сборщика мусора (GC). Вместо двух пауз, составляющих около 10 мс для каждого GC в Дальвике, вы увидите только один, обычно менее 2 мс. Они также распараллеливали части GC-сессий и оптимизировали стратегии сбора информации о состояниях устройств. Например, полный GC будет работать только тогда, когда телефон заблокирован, а реакция взаимодействия с пользователем больше не важна. Это огромное улучшение для приложений, чувствительных к сброшенным кадрам.

То, что автор говорит здесь, заключается в том, что устройства с питанием от АРТ будут намного эффективнее в контексте ГК – как в отношении времени «ГХ» отходов, так и объема памяти, освобожденной во время работы.

Дополнительный вклад в использование нижней памяти можно отнести к этому (это всего лишь предположение):

Пожалуй, самое важное улучшение, теперь ART компилирует ваше приложение на собственный машинный код, когда он установлен на устройстве пользователя. Известный как компиляция с опережением времени, вы можете ожидать больших выигрышей в производительности, поскольку компиляторы настроены для определенных архитектур (таких как ARM, x86 или MIPS). Это устраняет необходимость компиляции «точно вовремя» при каждом запуске приложения. Таким образом, ваше приложение займет немного больше времени для установки, но будет загружаться быстрее при запуске, так как многие задачи, выполняемые во время выполнения на Dalvik VM, такие как проверка класса и метода, уже выполнены.

Поскольку АРТ компилирует ваше приложение заблаговременно, время компиляции может быть расширено, что позволяет компилятору лучше оптимизировать ваш код.