OutOfMemoryError и класс выгрузки sun.reflect.GeneratedMethodAccessor - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть приложение с настройками: -Xmx2048M, -Xms2048M, -XX: MaxPermSize = 256M.
Иногда я получаю много сообщений в журнале:

[Unloading class sun.reflect.GeneratedMethodAccessor9]  
[Unloading class sun.reflect.GeneratedMethodAccessor129]  
[Unloading class sun.reflect.GeneratedMethodAccessor12]  
[Unloading class sun.reflect.GeneratedMethodAccessor11]  
[Unloading class sun.reflect.GeneratedMethodAccessor12]  
[Unloading class sun.reflect.GeneratedMethodAccessor11]  
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor29]  
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor25]  

и получите ошибку:

OutOfMemoryError: пространство кучи Java

После прочтения этой статьи:
http://anshuiitk.blogspot.com/2010/11/excessive-full-garbage-collection.html
Я знаю, что классы загружаются в Perm Gen и должно произойти ошибка:

OutOfMemoryError: Пробел PermGen.

Мой вопрос, почему у меня возникает ошибка OutOfMemoryError: пространство кучи Java вместо
OutOfMemoryError: пространство PermGen?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Это означает, что вам не хватает места в куче (или у вас есть пространство, которое по какой-то причине не может расти)

Вы получаете PermGen space. в качестве причины, когда заканчивается максимум для этого пространства.

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

1 голос
/ 13 мая 2013

Как @Peter говорит, что это проблема кучи.Выгрузка является побочным эффектом полной сборки мусора, а не признаком того, что что-то идет не так.

Вот как разрешить и предотвратить OOM:

  • Разрешить дампы кучи наOOM -XX:+HeapDumpOnOutOfMemoryError в точке доступа, опция не снижает производительность
  • Изучите дамп кучи и выясните, где у вас есть утечка или чрезмерное использование кучи, например, огромные выборки из базы данных.
  • Один развы разбираетесь в анализе кучи, берете дампы кучи через jmap во время разработки и анализируете на наличие утечек.
  • Если вы считаете, что у вас могут быть утечки в рабочей среде: jmap -histo - хороший вариант, поскольку он имеет лишь небольшое снижение производительности.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...