#java #eclipse #jvm #jvm-arguments
#java #затмение #jvm #jvm-аргументы
Вопрос:
В последнее время я получаю пресловутое сообщение об ошибке: OutOfMemoryError
. У меня 64-битный Mac с 16 ГБ оперативной памяти и четырехъядерным процессором 2X2,6 ГБ. Получение этого сообщения об ошибке просто не имеет для меня смысла, потому что тот же алгоритм, который я использую (который вызывает это сообщение об ошибке), работает бесперебойно на другом компьютере (ubuntu 16GB Ram).
System.out.println(java.lang.Runtime.getRuntime().maxMemory());
Когда я запускаю приведенный выше код на своем Mac, я получаю: 129 957 888 (без запятой, конечно :-))
И при запуске этого кода на компьютере Ubuntu я получаю: 1,856,700,416
Кто-нибудь может сказать мне, как я могу увеличить свой максимальный объем памяти, чтобы запустить свой алгоритм? Спасибо!
Я попытался установить в своем eclipse: аргументы виртуальной машины по умолчанию -Xms512m -Xmx4g
, но ничего не изменилось.
Комментарии:
1. Я думаю, вы имеете в виду 16 ГБ оперативной памяти, нет?
Ответ №1:
-Xmx
и -Xms
являются правильными аргументами java
команды для изменения размера кучи, но Eclipse должен быть настроен по-другому.
Ответ №2:
Вам придется уточнить. Вы проводите тест в Eclipse или за пределами Eclipse? Простая передача параметра «-Xmx» в Eclipse не приведет к тому, что вы хотите, даже если вы сделаете это правильным способом, чтобы фактически изменить значение max mem для Eclipse (для этого требуется добавить к нему префикс «-vmargs»).). Если вы хотите изменить значение max mem для разветвленной JVM, на которой выполняется ваш алгоритм, вам необходимо изменить параметры в конфигурации запуска.
Ответ №3:
Похоже, что Мэтт Б рассмотрел этот вопрос. Я просто хотел упомянуть, что вы, возможно, не захотите устанавливать максимальный размер кучи на уровне 4 ГБ, если только вашей программе действительно не понадобится так много. Насколько я понимаю, JVM выделяет всю эту память для себя при запуске, а затем использует ее для запуска кода по мере необходимости. Выделение такого объема памяти может вызвать проблемы с производительностью других приложений, которые вы запускаете. Вместо этого попробуйте увеличить его с шагом 128 МБ или больше, если сбой вашего кода занимает много времени. В качестве альтернативы, может быть, вы можете использовать профилировщик памяти, чтобы увидеть, сколько места вы на самом деле используете? Я понятия не имею, существует ли такая вещь.
Вероятно, это не проблема в вашей настройке, но для простых смертных, таких как я, беспечное выделение такого объема памяти может быть проблематичным.