답변:
영구 세대. 세부 사항은 물론 구현에 따라 다릅니다.
간단히 말해서, 클래스 및 인턴 문자열과 관련된 Java 객체를 포함합니다. 공유 기능을 사용하는 Sun의 클라이언트 구현에서는 classes.jsa
약 절반은 읽기 전용이고 절반은 쓰기시 복사로 초기 데이터를 형성하도록 메모리 매핑됩니다.
단순히 오래된 Java 객체는 Tenured Generation에 보관됩니다.
PermGen은 JVM에서로드 된 클래스를 보유하는 데 사용됩니다. 다음을 사용하여 늘릴 수 있습니다.
-XX:MaxPermSize=384m
Sun JVM 또는 OpenJDK를 사용하는 경우.
따라서 OutOfMemoryException : PermGen이 발생하면 PermGen을 더 크게 만들어야하거나 클래스 로더 문제가있을 수 있습니다.
원래 질문과 실제로 관련이 없지만 누군가가 유용하다고 생각할 수 있습니다. PermGen은 실제로 Java가 클래스를 유지하는 데 사용되는 메모리 영역입니다. 그래서 우리 중 많은 사람들이 예를 들어 많은 수업이 있다면 PermGen에서 OOM을 접했습니다.
Java 8 이후 PermGen 영역은보다 효율적이고 기본적으로 무제한 (또는 32 비트 또는 64 비트 jvm 및 OS 가상 메모리 가용성에 따라 기본 메모리 양에 따라 더 정확하게 제한됨) 인 MetaSpace 영역으로 대체되었습니다. 그러나 예를 들어 영역에 대한 최대 제한을 지정하는 등 몇 가지 방법으로 조정할 수 있습니다. 이 블로그 게시물 에서 더 유용한 정보를 찾을 수 있습니다 .
PermGen은 영구 세대를 의미합니다 .
다음은 DDJ에 대한 간략한 설명입니다.
Permgen은 영구 세대를 의미합니다. JVM 메모리 영역 중 하나입니다. MaxPermSize라는 플래그를 사용하여 크기가 고정 된 힙의 일부입니다.
이름이 "PermGen"인 이유는 무엇입니까?
이 permgen은 Java 초기에 명명되었습니다. Permgen 메인은로드 된 클래스의 모든 메타 데이터를 유지합니다. 그러나 문제는 일단 클래스가로드되면 JVM이 종료 될 때까지 JVM에 남아 있다는 것입니다. 그래서 이름 permgen은 그것을 선택합니다. 그러나 나중에 클래스의 동적 로딩이 등장했지만 이름은 변경되지 않았습니다. 그러나 Java 8 에서는이 문제도 해결했습니다. 이제 permagen 로 이름이 바뀌 었습니다 MetaSpace 동적 메모리 크기.