programing

Java에서 'PermSize'는 무엇입니까?

nasanasas 2020. 11. 17. 08:11
반응형

Java에서 'PermSize'는 무엇입니까?


Java Memory Management 의 문서 를 살펴 보았는데 이해할 수없는 PermSize를 발견했습니다. 문서에는 "JVM이 메타 데이터를 저장합니다"라고 저장되어 있지만 메타 데이터가 의미하는 바를 정확히 알 수는 없습니다. 나는 인터넷 검색을하고 어딘가에 가치 객체 (사용자 정의 객체)를 저장합니다.

거기에 어떤 종류의 물건이 저장되어 있습니까? 설명이있는 예가 좋습니다.


"영구 세대"에 대한 간략한 정의 :

"영구 생성은 클래스 개체 및 메서드 개체와 같은 VM 자체의 반사 데이터를 보유하는 데 사용됩니다. 이러한 반사 개체는 영구 생성에 직접 할당되며 다른 세대와 독립적으로 크기가 조정됩니다." [참조]

즉, 여기에서 클래스 정의가 이동합니다 ( OutOfMemoryError: PermGen space애플리케이션이 많은 수의 클래스를로드하거나 재배포 할 때 메시지를받을 수있는 이유를 설명합니다 ).

참고 PermSize받는 사람 추가입니다 -XmxJVM 옵션에 사용자가 설정 한 값. 그러나 MaxPermSizeJVM이 PermSize지정된 양 까지 성장할 수 있습니다 . 처음에 VM MaxPermSize이로드 될 때는 여전히 기본값 (32mb -client64mb -server)이되지만 실제로 필요할 때까지 해당 양을 차지하지 않습니다. 반면에 둘 다 PermSizeMaxPermSize256MB 로 설정 하면 전체 힙이 -Xmx설정에 추가로 256MB만큼 증가했음을 알 수 있습니다.


이 블로그 게시물 은 멋진 설명과 배경을 제공합니다. 기본적으로 "영구 생성"(PermSize에 의해 크기가 지정됨)은 JVM이 공간을 할당해야하지만 (일반적으로) 가비지 수집되지 않는 (따라서 "영구적") (+) 항목을 저장하는 데 사용됩니다. 이는 예를 들어로드 된 클래스 및 정적 필드를 의미합니다.

영구 생성에 대한 몇 가지 질문에 대답하는 Sun에서 직접 가비지 수집에 대한 FAQ 도 있습니다 . 마지막으로, 기술적 인 세부 사항이 많이 포함 블로그 게시물 이 있습니다.

(+) 실제로 영구 생성 부를 것이다 GCed 일 예 클래스 언로드시 클래스 객체가 제거 될 것이다. 그러나 영구 세대가 JVM에 도입되었을 때 일반적이지 않았으므로 이름이 붙여졌습니다.


영구 풀에는 애플리케이션 데이터가 아니라 VM에 필요한 모든 것이 포함됩니다. 일반적으로 인턴 된 문자열, 정의 된 클래스의 바이트 코드 및 기타 "귀하의 것이 아닌"데이터 조각이 포함됩니다.


로드 된 클래스 정의 및 메타 데이터를 저장하기위한 lace. 대규모 코드 기반 프로젝트가로드되면 Perm Gen 크기가 충분하지 않아 인기있는 Java.Lang.OutOfMemoryError : PermGen이 발생합니다.

참고 URL : https://stackoverflow.com/questions/1634216/what-is-permsize-in-java

반응형