Какова цель установки минимального размера кучи в приложении для Android?

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

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

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

Ответ 1

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

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

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