Ответ
Размер кучи (Heap) задаётся при запуске JVM с помощью специальных параметров и не может быть изменён программно во время выполнения приложения.
Ключевые параметры командной строки:
| Параметр | Описание | Пример |
|---|---|---|
-Xms |
Начальный (минимальный) размер кучи. | -Xms256m (256 МБ) |
-Xmx |
Максимальный размер кучи. | -Xmx2g (2 ГБ) |
Пример запуска приложения с настройкой кучи:
java -Xms512m -Xmx4g -jar my-application.jar
Практические рекомендации и детали:
- Единицы измерения: Используйте
mдля мегабайт,gдля гигабайт (например,-Xmx2048mили-Xmx2g). - Равенство
-Xmsи-Xmx: Установка одинаковых значений (-Xms4g -Xmx4g) рекомендуется для production, чтобы:- Избежать накладных расходов на динамическое расширение кучи.
- Исключить паузы GC, связанные с увеличением размера.
- Гарантировать, что приложение сразу получит все необходимые ресурсы.
- Ограничения: Максимальный размер кучи ограничен архитектурой ОС (например, 32-битные системы) и доступной физической памятью.
- Другие области памяти: Параметры
-Xss(размер стека потока) и-XX:MaxMetaspaceSize(метапространство) управляют другими областями памяти JVM.
Проверка текущих настроек из кода (только для чтения):
Runtime runtime = Runtime.getRuntime();
long maxMemory = runtime.maxMemory(); // -Xmx
long totalMemory = runtime.totalMemory(); // Текущий размер кучи (>= -Xms)
long freeMemory = runtime.freeMemory();