2015-10-23 2 views
0
Exception in thread "Thread-8" java.lang.OutOfMemoryError: Java heap space 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-8" 
Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space 
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space 
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space 
Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space 

У меня такое исключение. Может ли кто-нибудь помочь мне понять, почему это исключение происходит?Исключение из потока «Thread-8» java.lang.OutOfMemoryError: Java куча пространства

Исключением не предусмотрено, где это происходит в моем коде.

EDIT: Из всех ответов я получил, я понял, что мне нужен какой-то Java Profiler, чтобы помочь мне определить, где утечка памяти есть. Поскольку я использую NetBeans для разработки моего приложения, я решил использовать его встроенный профилировщик .

@MuhammadGhazanfar дал мне это очень полезно ссылка: Best way to profile memory usage in a Java application?

Спасибо за ваше время и вашу помощь.

ответ

0

Идущ Java docs, то OutOfMemoryError есть

Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.


Почему это происходит? Ваше приложение просто использует слишком много памяти.

Что вы можете сделать, чтобы исправить ошибки? Ну, вы можете попробовать некоторые из вещей, перечисленных ниже и посмотреть here и here для более

  • Попробуйте использовать Singleton pattern где вы можете.
  • Избегайте использования больших массивов. Легче установить связанный список в памяти.
  • Не делайте объект, если он вам не нужен.
  • Используйте опцию -Xmx с java, чтобы установить более высокий размер кучи.
+0

спасибо, что ответите. Вы очень добры. Есть ли способ отслеживать объект, который потребляет всю память? Что бы вы посоветовали мне использовать, чтобы понять, откуда вытекает утечка? – ThelmaJay

+0

еще раз спасибо. – ThelmaJay

+0

@ThelmaJay Вам понадобится профайлер. Прочтите эти ссылки. [Наилучший способ-к профилю-памяти-использование-в-Java-приложение] (http://stackoverflow.com/questions/756873/best-way-to-profile-memory-usage-in-a- java-application) [How-to-memory-profile-in-java] (http://stackoverflow.com/questions/10108942/how-to-memory-profile-in-java) –

0

Не имеет значения, где это происходит: это просто происходит в месте, где требуется некоторая память; и никто не будет найден.

В основном вы хотите узнать, как использовать профилировщик Java в профиле использования памяти вашего приложения; для того, чтобы либо вычислить утечку памяти, с которой вы имеете дело; или понять, сколько памяти действительно требуется; может просто состоять в том, что вашему приложению требуется больше памяти, чем настройки по умолчанию при запуске учетной записи «java».

+0

Я провел некоторое исследование, но ни один из сообщений, которые я нашел, не помог мне. С одного из этих сообщений я добавил -Xmx1024m -Xms512m, но мне не помог. Я знаю, что проблема заключается в утечке, которую я просто хотел понять, где. Мое намерение, когда я разместил этот вопрос, состоял в том, чтобы увидеть, видел ли кто-нибудь его уже, и, возможно, знал, какой тип кода может создать такое исключение. Я не собирался задавать вопрос только ради этого. Мне нужны были направления, потому что я не знаю, где искать. Ваш совет - использовать Java Profiler. Я буду смотреть в Интернете, чтобы узнать больше об этом. Спасибо. – ThelmaJay

+0

Ну, «отладка утечек памяти Java» дала мне хорошие ссылки из коробки. Но хорошо, иногда действительно нужно, чтобы SO попала на правильный путь ... – GhostCat

Смежные вопросы