PermGen은 실제로 무엇을 의미합니까?


122

PermGen이 무엇인지, 사용 용도, 실패 이유, 증가 방법 등을 알고 있습니다.

내가 모르는 것은 PermGen이 실제로 의미하는 바입니다. 영구 ... Gen ... 뭔가?

PermGen이 실제로 무엇을 의미하는지 아는 사람이 있습니까?


1
[좋은 설명] [1] GC 내부에 대해 많이 아는 사람의 말입니다. 그나저나 그의 블로그에는 유용한 GC 관련 정보가 많이 있습니다. [1] : blogs.oracle.com/jonthecollector/entry/…
Ivan Dubrov

답변:


84

영구 세대. 세부 사항은 물론 구현에 따라 다릅니다.

간단히 말해서, 클래스 및 인턴 문자열과 관련된 Java 객체를 포함합니다. 공유 기능을 사용하는 Sun의 클라이언트 구현에서는 classes.jsa약 절반은 읽기 전용이고 절반은 쓰기시 복사로 초기 데이터를 형성하도록 메모리 매핑됩니다.

단순히 오래된 Java 객체는 Tenured Generation에 보관됩니다.


19
"JDK 7에서 인턴 된 문자열은 더 이상 Java 힙의 영구 생성에 할당되지 않습니다.": oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
almalkawi

30
그리고 JDK 8에는 영구적 인 생성이 전혀 없습니다! 이 답변이 수년에 걸쳐 진화하는 것을 보는 것은 재미 있습니다.
브라이언 고든

3
@BrianGordon이 맞습니다 .. 이에 대한 자세한 정보 : stackoverflow.com/a/22509753/4557537
Fadi

59

PermGen은 JVM에서로드 된 클래스를 보유하는 데 사용됩니다. 다음을 사용하여 늘릴 수 있습니다.

-XX:MaxPermSize=384m

Sun JVM 또는 OpenJDK를 사용하는 경우.

따라서 OutOfMemoryException : PermGen이 발생하면 PermGen을 더 크게 만들어야하거나 클래스 로더 문제가있을 수 있습니다.


6
이 댓글을 게시 할 때 수락 된 답변은 무엇입니까? (현재 허용 대답 이 하나의 "톰 Hawtin의 - tackline"으로는) 나에게 정확한 보인다. 사람들이 현재 수락 된 답변을 믿지 않도록 댓글을 편집하는 것이 합리적일까요?
jbyler


8

원래 질문과 실제로 관련이 없지만 누군가가 유용하다고 생각할 수 있습니다. PermGen은 실제로 Java가 클래스를 유지하는 데 사용되는 메모리 영역입니다. 그래서 우리 중 많은 사람들이 예를 들어 많은 수업이 있다면 PermGen에서 OOM을 접했습니다.

Java 8 이후 PermGen 영역은보다 효율적이고 기본적으로 무제한 (또는 32 비트 또는 64 비트 jvm 및 OS 가상 메모리 가용성에 따라 기본 메모리 양에 따라 더 정확하게 제한됨) 인 MetaSpace 영역으로 대체되었습니다. 그러나 예를 들어 영역에 대한 최대 제한을 지정하는 등 몇 가지 방법으로 조정할 수 있습니다. 이 블로그 게시물 에서 더 유용한 정보를 찾을 수 있습니다 .




3

내가 올바르게 기억한다면, Gen은 세대 별 가비지 수집기 (중년기 및 "영구"개체와는 다른 방식으로 젊은 개체를 처리)에서와 같이 세대를 나타냅니다. 지역성의 원칙에 따르면 최근에 생성 된 개체가 먼저 삭제됩니다.


1

Permgen은 영구 세대를 의미합니다. JVM 메모리 영역 중 하나입니다. MaxPermSize라는 플래그를 사용하여 크기가 고정 된 힙의 일부입니다.

이름이 "PermGen"인 이유는 무엇입니까?

이 permgen은 Java 초기에 명명되었습니다. Permgen 메인은로드 된 클래스의 모든 메타 데이터를 유지합니다. 그러나 문제는 일단 클래스가로드되면 JVM이 종료 될 때까지 JVM에 남아 있다는 것입니다. 그래서 이름 permgen은 그것을 선택합니다. 그러나 나중에 클래스의 동적 로딩이 등장했지만 이름은 변경되지 않았습니다. 그러나 Java 8 에서는이 문제도 해결했습니다. 이제 permagen 로 이름이 바뀌 었습니다 MetaSpace 동적 메모리 크기.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.