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

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

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

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



답변

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

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

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


답변

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

-XX:MaxPermSize=384m

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

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


답변

영구 세대. 가비지 수집기에 대한 자세한 내용 은 Java GC 조정 가이드 를 참조하세요.


답변

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

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


답변

PermGen은 영구 세대를 의미합니다 .

다음은 DDJ에 대한 간략한 설명입니다.


답변


답변

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