Какова цель установки минимального размера кучи в приложении для Android? - PullRequest
7 голосов
/ 05 октября 2009

В приложении Google Calendar для Android вы встретите эту строку в методе onCreate CalendarActivity .

// Eliminate extra GCs during startup by setting the initial heap size to 4MB.
VMRuntime.getRuntime().setMinimumHeapSize(INITIAL_HEAP_SIZE)

Может кто-нибудь объяснить, почему установка 4 МБ исключает сборщик мусора?

1 Ответ

16 голосов
/ 05 октября 2009

JVM обычно начинается с выделения сравнительно небольшой кучи. Затем после каждого запуска GC он проверяет, сколько свободной памяти кучи есть. Если отношение свободной кучи к общей куче слишком мало, JVM добавит в нее больше памяти (до максимального настроенного размера кучи).

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

Предположим, что разработчик приложения знает, что приложению, скорее всего, необходим определенный объем кучи (например, 4 МБ) для комфортной работы. Установка этого размера в качестве минимального размера кучи означает, что JVM не нужно запускать GC, когда куча заполняет, скажем, 1 МБ, 2 МБ и 3 МБ. В результате JVM меньше запускает сборщик мусора во время запуска приложения и нормального запуска, приложение запускается быстрее, и пользователь видит меньше пауз GC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...