2012-02-08 6 views
2

-Xmx2048M, -Xms2048M, -XX : MaxPermSize = 256M 설정이있는 응용 프로그램이 있습니다.
는 가끔 로그에 메시지를 많이 얻을 :OutOfMemoryError 및 언로드 클래스 sun.reflect.GeneratedMethodAccessor

[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에로드되어 있으며 오류가 발생해야합니다.

OutOfMemoryErro r : PermGen 공간.

내 질문에 왜 OutOfMemoryError 오류가 발생합니까?
대신 Java 힙 공간이 발생했습니다. OutOfMemoryError : PermGen space?

답변

2

이것은 당신이 힙 공간이 부족 의미 (또는 어떤 이유로 성장하지 수있는 공간이)이 공간의 최대 밖으로 실행하는 경우에만 이유로 PermGen space.을 얻을

합니다.

즉, 힙 공간이 커져서 오브젝트를 보유 할 수 없으므로이 오류가 발생합니다.

+0

응답 해 주셔서 감사합니다. 그러나이 메시지 [Unloading class sun.reflect.GeneratedMethodAccessor9]는 Perm Gen에서 문제를 나타내며 OutOfMemoryError : PermGen 공간을 얻지 못하는 이유를 나타냅니다. 또는 처음에는 OutOfMemoryError : PermGen을 그리고 나서 OutOfMemoryError : Java 힙 공간을 나타 냅니까? – luk4443

+0

메시지가 PermGen이 정리되었음을 나타냅니다. 그 이상. 'OOME Java heap space '전에 항상 Full GC를 얻을 것이고, 거기에는 충분한 공간이있을지라도 perm gen을 포함한 모든 영역이 정리 될 것입니다. –

+0

지금까지 OutOfMemoryError가 부드러운 참조에 의해 트리거되었다고 생각했습니다. GC가 제대로 청소할 수 없을 때. 하지만 OOME의 다른 이유가 있습니다. – luk4443

0

처럼 @Peter는 힙 문제라고 말합니다. 언로드는 전체 가비지 수집의 부작용이며 아무런 문제가 없음을 나타냅니다. 여기

를 해결하고 예방하는 방법을 움스입니다 :

  • 힙 핫스팟에 OOM -XX:+HeapDumpOnOutOfMemoryError에 덤프 허용 옵션이
  • 연구 힙 덤프에는 성능 저하가 없으며 당신이 누수가 어디서 이해 예를 들어, 힙의 오버 커밋 된 사용 거대한 데이터베이스에서 선택합니다.
  • 일단 힙 분석에 익숙해지면 개발 중에 jmap을 통해 힙 덤프를 가져 와서 누수를 분석하십시오.
  • 생산에 누수가 있다고 생각되는 경우 : 성능 저하가 거의 없으므로 jmap -histo은 좋은 옵션입니다.