Перейти к основному содержимому

Разница в используемой, выделенной и максимальной памяти кучи

· 2 мин. чтения

1. Обзор

В этой короткой статье мы увидим разницу между различными показателями размера памяти в JVM.

Сначала мы поговорим о том, как работает адаптивный размер, а затем оценим разницу между максимальным, используемым и зафиксированным размерами.

2. Максимальный размер и адаптивный размер

Два значения управляют размером кучи JVM : одно начальное значение, указанное с помощью флага -Xms, и другое максимальное значение, управляемое флагом настройки -Xmx .

Если мы не укажем эти флаги, то JVM выберет для них значения по умолчанию. Эти значения по умолчанию зависят от базовой ОС, объема доступной оперативной памяти и, конечно же, самой реализации JVM:

./94a1b310f945767ed58250773aa6b8a1.png

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

Проще говоря, максимальный размер кучи — это размер, указанный с помощью флага -Xmx . Кроме того, когда мы явно не указываем -Xmx , JVM вычисляет максимальный размер по умолчанию .

3. Используемый размер

Теперь предположим, что мы выделили несколько объектов с момента запуска программы. Размер кучи может немного увеличиться для размещения новых объектов:

./e9dfafa1dc10dedcaaef8b696ad03596.png

Используемое пространство — это объем памяти, который в данный момент занят объектами Java . Он всегда меньше или равен максимальному размеру.

4. Гарантированный размер

Выделенный размер — это объем памяти, гарантированно доступный для использования виртуальной машиной Java . Выделенный размер памяти всегда больше или равен используемому размеру.

5. Вывод

В этой короткой статье мы увидели разницу между максимальным, используемым и выделенным размером кучи.