2011-03-22 3 views
4

Java 힙의 PERM Area에서 가비지 수집이 발생합니까?Java의 PERM 영역

PERM 영역은 클래스, 메소드, 변수 등에 대한 메타 데이터를 저장하는 데 사용됩니다. 문자열 풀이 PERM 영역에서 생성되었으므로 가비지 수집이 여기 발생하지 않는다고 생각합니까?

+1

중복 된 http://stackoverflow.com/questions/3796427/in-java-does-permamnent-generation-space-garbage-collected – CoolBeans

+0

좋은 질문 - 부모 클래스 로더가 수집 할 수있는 객체를 수집 할 수 있다고 가정합니다. 버려지지만 조금 추측하고 있기 때문에 '답변'으로 게시하지 않습니다. –

+0

@Steve B - 힙의 다른 요소와 같습니다. 따라서 결국에는 가비지 수집됩니다. – CoolBeans

답변

3

각 배포마다 새 클래스 개체가 PermGen에 배치되어 점점 더 많은 공간을 차지합니다. PermGen 공간의 크기에 관계없이 충분한 배포가 필연적으로 두드러집니다. PermGen의 크기를 안정화시킬 수 있도록 조치를 취해야합니다. 이 정리를 처리하는 두 개의 JVM 플래그가 있습니다.

-XX:+CMSPermGenSweepingEnabled 

이 설정에는 가비지 수집 실행의 PermGen이 포함됩니다. 기본적으로 PermGen 공간은 가비지 수집에 포함되지 않습니다 (따라서 경계없이 증가합니다).

-XX:+CMSClassUnloadingEnabled 

이 설정은 클래스 개체에 대한 조치를 취할 수 PermGen 가비지 컬렉션 스윕을 알려줍니다. 기본적으로 클래스 개체는 Garabage 컬렉션 중에 PermGen 공간을 방문하는 경우에도 면제를받습니다.

0

이론적으로 클래스 로더가 가비지 수집되면 해당 클래스 로더에 의해로드 된 클래스가 가비지 수집 될 수 있다고 생각합니다. 이 클래스는 영구 생성됩니다.