java.lang. OutOfMemoryError: пространство "кучи" Java

В дополнение к тому, что другие SO'ers уже предложили, вот мои 2 цента:

  1. Начинают учить язык и испытывают несколько простых числовых проблем / проблем хобби на языке
  2. ВАЖНЫЙ: Сообщение решение/код StackOverflow, прося мнение людей, если это - действительно путь LISPy , чтобы сделать это.

Всего наилучшего

94
задан Ravindra babu 15 February 2016 в 15:16
поделиться

7 ответов

Если вы хотите увеличить пространство кучи, вы можете использовать java -Xms <начальный размер кучи> -Xmx <максимальный размер кучи> в командной строке. По умолчанию значения основаны на версии JRE и конфигурации системы. Вы можете узнать больше о параметрах виртуальной машины на веб-сайте Java .

Однако я бы порекомендовал профилировать ваше приложение, чтобы выяснить, почему ваш размер кучи «съедается». NetBeans включает в себя очень хороший профилировщик . Я полагаю, что он использует jvisualvm под капотом. С помощью профилировщика вы можете попытаться найти, где создается много объектов, когда объекты собираются сборщиком мусора и т. Д.

99
ответ дан 24 November 2019 в 06:07
поделиться

1.- Да, но это в значительной степени относится ко всей памяти, используемой вашей программой.

2.- Да, см. Параметры Java VM

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size

Т.е.

java -Xmx2g назначьте вашему приложению максимум 2 гигабайта оперативной памяти

Но вы должны проверить, нет ли у вас утечки памяти первое.

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

25
ответ дан 24 November 2019 в 06:07
поделиться

Вы можете посетить этот сайт, чтобы узнать больше о памяти в JVM: http://developer.streamezzo.com/content/learn/articles/optimization-heap-memory-usage

Мне показалось полезным использовать visualgc , чтобы посмотреть, как разные части модель памяти заполняется, чтобы определить, что нужно изменить.

Трудно определить, какая часть памяти была заполнена, следовательно, visualgc, поскольку вы можете просто изменить часть, в которой возникла проблема, а не просто скажи:

Хорошо! Я дам 1 ГБ ОЗУ для JVM.

Постарайтесь уточнить, что вы делаете, в конечном итоге вы, вероятно, найдете программу лучше для этого.

Чтобы определить, где может быть утечка памяти, вы можете для этого можно использовать модульные тесты, проверяя, какой была память до теста и после, и если есть слишком большое изменение, вы можете проверить его, но вам нужно выполнить проверку, пока ваш тест все еще выполняется .

8
ответ дан 24 November 2019 в 06:07
поделиться
  1. Локальные переменные находятся в стеке. Пространство кучи занято объектами.

  2. Вы можете использовать параметр -Xmx .

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

3
ответ дан 24 November 2019 в 06:07
поделиться

Чтобы увеличить размер кучи, вы можете использовать аргумент -Xmx при запуске Java ; например

-Xmx256M
6
ответ дан 24 November 2019 в 06:07
поделиться

Нет, я думаю, вы думаете о пространстве стека. Пространство кучи занято объектами. Способ увеличения -Xmx256m,

1
ответ дан 24 November 2019 в 06:07
поделиться
  1. В большинстве случаев код не оптимизирован. Освободите те предметы, которые, по вашему мнению, в дальнейшем не понадобятся. Избегайте создания объектов в вашем цикле каждый раз. Попробуйте использовать кеши. Я не знаю, как дела у вашего приложения. Но в программировании также применяется одно правило нормальной жизни

    . Профилактика лучше лечения. «Не создавайте лишних объектов»

5
ответ дан 24 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: