Каковы возможные причины "java.lang.OutofMemoryError" в исполняющем потоке? - PullRequest
0 голосов
/ 04 июля 2011

Я столкнулся с проблемой нехватки памяти в моем приложении.

В одном из моих потоков выполнение внезапно java.lang.OutofMemoryError и заставить эти потоки умереть.

Я уже выбрал размер кучи памяти для приложения 20M. Я выкинул использование памяти для всего приложения до и после этого OOM в этом потоке, оно не превышает 20M.

Я не знаю, как решить эту проблему.

Так, каковы возможные причины этого java.lang.OutofMemoryError? и есть ли способ решить, если я не знаю точную причину?

Это то, что я получил! До этого использования памяти приложения составляет 8M

после этого использование памяти приложением также составляет 8 млн.

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Вероятно, это связано с тем, что приложению недостаточно памяти.

Я уже выбрал размер кучи памяти для приложения 20M. Я выкинул использование памяти для всего приложения до и после этого OOM в этом потоке, оно не превышает 20M.

Размер кучи никогда не будет больше максимального. Вот что значит максимум. ;)

1 голос
/ 04 июля 2011

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

Вы можете присоединиться к своей работающей программе с помощью jvisualvm (в JDK) и исследовать дерево объектов, чтобы увидеть, куда ушла память. Надеюсь, вы сможете понять, почему он все еще используется (может быть таким же простым, как статическое поле, содержащее копию структуры) и как от него избавиться.

Когда вы нашли это, вставьте предложения try-finally, чтобы память всегда освобождалась, даже если выбрасывается OOM.

...