как увеличить память Java (алгоритмы работают на ubuntu, но не на mac; та же конфигурация компьютера)

#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 МБ или больше, если сбой вашего кода занимает много времени. В качестве альтернативы, может быть, вы можете использовать профилировщик памяти, чтобы увидеть, сколько места вы на самом деле используете? Я понятия не имею, существует ли такая вещь.

Вероятно, это не проблема в вашей настройке, но для простых смертных, таких как я, беспечное выделение такого объема памяти может быть проблематичным.