Подтвердить что ты не робот

Как увеличить память кучи Java навсегда?

У меня есть одна проблема с памятью кучи java. Я разработал одно клиентское серверное приложение в Java, которое запускается как служба Windows, для которого требуется более 512 МБ памяти. У меня 2 ГБ ОЗУ, но когда я запускаю свое приложение, он генерирует исключение

Ошибка памяти: пространство кучи java

но я уже установил размер кучи (максимум 512 МБ) в панели управления java, и я все равно получаю ту же ошибку. Я не могу установить размер кучи через командную строку, потому что мое приложение работает как служба Windows, так как я могу увеличить размер кучи по умолчанию?

4b9b3361

Ответ 1

Обратите внимание, что увеличение размера кучи Java после java.lang.OutOfMemoryError: Java heap space довольно часто является краткосрочным решением.

Это означает, что даже если вы увеличите размер кучи Java по умолчанию от 512 МБ до 2048 МБ, вы все равно можете получить эту ошибку в какой-то момент, если вы имеете дело с утечкой памяти. Главный вопрос: почему вы получаете эту ошибку OOM на первом месте? Действительно ли это значение Xmx слишком мало или просто симптом другой проблемы?

При разработке приложения Java всегда важно понять его статические и динамические требования к памяти на ранней стадии, это поможет предотвратить сложные проблемы OOM в дальнейшем. Правильная настройка параметров JVM Xms и Xmx может быть достигнута путем надлежащего профилирования приложений и тестирования нагрузки.

Ответ 2

Виртуальная машина Java принимает два аргумента командной строки, которые устанавливают размеры начальной и максимальной кучи: -Xms и -Xmx. Вы можете добавить переменную системной среды с именем _JAVA_OPTIONS и установить значения размера кучи.
Например, если вы хотите получить максимальный размер кучи размером 512 МБ и 1024 Мб, который вы могли бы использовать:

под Windows:

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m

под Linux:

export _JAVA_OPTIONS="-Xms512m -Xmx1024m"

Можно запрограммировать размер кучи JVM по умолчанию с помощью метода totalMemory() класса Runtime. Используйте следующий код, чтобы прочитать размер кучи JVM.

public class GetHeapSize {
    public static void main(String[]args){

        //Get the jvm heap size.
        long heapSize = Runtime.getRuntime().totalMemory();

        //Print the jvm heap size.
        System.out.println("Heap Size = " + heapSize);
    }
}

Ответ 3

если вам нужно увеличить зарезервированную память, есть параметры VM -Xms и -Xmx, использование, например. -Xms512m -Xmx512m. Существует также параметр -XX: MaxPermSize = 256m, который изменяет память, зарезервированную для постоянного поколения

Если ваше приложение работает как служба Windows, в Панели управления → Инструменты администрирования → Сервисы вы можете добавить некоторые параметры запуска к вашему сервису

Ответ 4

Это сработало для меня:

export _JAVA_OPTIONS = "- Xmx1g"

Важно, что у вас нет пробелов, потому что для меня это не сработало. Я бы предложил просто скопировать и вставить. Затем я побежал:

java -XshowSettings: vm

и он скажет вам:

Поднято _JAVA_OPTIONS: -Xmx1g