Как устранить ошибку OutOfMemory лучшим способом - PullRequest
0 голосов
/ 26 апреля 2019

Я программирую Java-приложение, позволяющее минимизировать любое логическое выражение, используя методологию QuineMcCluskey. Когда я компилирую свой код, у меня появляется OutOfMemory Ошибка с сообщением "Пространство кучи Java" !

Если я понимаю, исключение может иметь несколько источников:

  • Объем памяти, выделенный для кучи JVM, недостаточен для создания объектов, требуемых приложением.

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

  • ...

Я знаю, что использование инструмента профилирования может быть необходимо для анализа содержимого памяти JVM и определения источника потребления памяти. Но как использовать эти инструменты? Должен ли я изменить данные xmx и xms? Какие могут быть последствия, если я их поменяю? (Я также знаю, что необходимо оптимизировать мой код).

Какие существуют этапы отладки?

Кроме того, это приложение должно использоваться многими пользователями (например, разными компьютерами ...)

Как видите, у меня много вопросов по этой проблеме (я новичок, смеется) ... Вот почему я создаю этот пост .. Я бы хотел решить эту проблему лучше, а также Учи хорошие рефлексы.

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Увеличение памяти НЕ является решением, если у вас нет неограниченных ресурсов!

Если это происходит на производстве или на любой машине, отличной от вашей, вы можете заставить JVM, которая запускает ваш сервис, сгенерировать файл дампа, который вы затем можете загрузить и проанализировать, добавив флаг VM -XX: + HeapDumpOnOutOfMemoryError в вашу jvm. файл конф.

Это очень полезно, когда компьютер, на котором запущено приложение, перестает отвечать на запросы, поэтому невозможно установить JMX-соединения для запуска средств мониторинга JMC (или аналогичных) Oracle. Если по какой-то причине вы можете добраться до ВМ, вы можете запустить запись полета и попытаться проанализировать, какой метод вызывает ООМ.

Проверьте здесь как использовать запись полета.

И проверьте это для предварительного просмотра анализа дампа кучи

0 голосов
/ 26 апреля 2019

Можно увеличить размер кучи, выделенной JVM, с помощью параметров командной строки. Здесь у нас есть 3 параметра

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

 java -Xms16m -Xmx64m ClassName

Также возможно увеличить размер кучи, выделяемый JVM в затмении напрямую. В затменииIDE goto

Выполнить ----> Выполнить настройки ----> Аргументы

И установить аргументы VM

...