PermGen과 Metaspace의 차이점은 무엇입니까?
Java 7까지 JVM 메모리에는 PermGen이라고 불리는 영역이 있었는데, JVM이 클래스를 유지하는 데 사용되었습니다.Java 8에서는 Metaspace라는 영역이 제거되고 대체되었습니다.
PermGen과 메타스페이스의 가장 중요한 차이점은 무엇입니까?
제가 아는 유일한 차이점은java.lang.OutOfMemoryError: PermGen space
VM 매개 변수를 더 이상 던질 수 없습니다.MaxPermSize
무시됩니다.
사용자 관점에서의 주요 차이점은 이전 답변에서는 충분히 강조되지 않았다고 생각합니다만, 기본적으로는 Metaspace는 크기를 (기본 OS가 제공하는 크기까지) 증가하지만 PermGen은 항상 최대 크기를 고정합니다.JVM 매개 변수를 사용하여 메타스페이스의 고정 최대값을 설정할 수 있지만 PermGen을 자동으로 늘릴 수는 없습니다.
대체로 그것은 단지 명칭의 변경일 뿐이다.PermGen이 도입되었을 때는 Java EE나 동적 클래스(언로드)가 없었기 때문에 일단 클래스가 로드되면 JVM이 셧다운될 때까지 메모리에 고정되어 영구 생성되었습니다.오늘날에는 JVM 수명 동안 클래스를 로드 및 언로드할 수 있으므로 메타스페이스는 메타데이터가 보관되는 영역에 더 적합합니다.
두 개 모두,java.lang.Class
두 인스턴스 모두 ClassLoader 누수로 인해 문제가 발생합니다.다만, Metaspace 디폴트 설정에서는, 증상을 알아차릴 때까지의 시간이 걸립니다(가능한 한 자동적으로 증가하기 때문에), 즉 문제를 해결하지 않고 문제를 멀리까지 밀어내는 것입니다.OTOH JVM PermGen이 부족할 때보다 OS 메모리가 부족할 때의 영향이 더 심각할 수 있기 때문에 크게 개선되는 것은 아니라고 생각합니다.
PermGen에서 JVM을 사용하든 Metaspace에서 사용하든 동적 클래스 언로딩을 수행할 경우 ClassLoader Leak Prevention 라이브러리를 사용하여 클래스 로더 누수에 대한 조치를 취해야 합니다.
안녕, Perm Gen, 안녕 메타스페이스
PermGen이 완전히 삭제되었습니다.
메타스페이스 가비지 컬렉션 - 데드 클래스와 클래스로더의 가비지 컬렉션은 클래스 메타데이터 사용량이 다음 값에 도달하면 트리거됩니다.MaxMetaspaceSize
.
공간Metadata
Wased는 더 이상 에 인접하지 않습니다.Java heap
, 。metadata
님은 하셨습니다.Metaspace
.
한마디로 말하면
클래스 메타데이터는 네이티브메모리에서 할당되기 때문에 사용 가능한 최대 공간은 사용 가능한 시스템메모리의 합계입니다.해서 이제 더 안 수 되었습니다.OOM errors
교환 공간으로 흘러들어갈 수 있습니다.
의 PermGen
클래스 로더 누출 문제가 사라진 것은 아닙니다.따라서 리크가 발생하면 네이티브 메모리 전체가 소모되기 때문에 소비량을 모니터링하고 그에 따라 계획을 세워야 합니다.
기타 기사 (분석 포함) :Link1, Link2 및 this
는 클래스 .Metaspace는 Metaspace로 됩니다.-XX:MaxMetaspaceSize
퍼머 생성
- (영구 생성)은 메인 메모리에서 분리된 특수한 힙 공간입니다.
- JVM은 PermGen에서 클래스 메타데이터를 추적합니다.또한 JVM은 여기에 모든 정적 콘텐츠를 저장합니다.
- 메모리 사이즈가 제한되어 있기 때문에 PermGen은 Out Of Memory Error를 슬로우할 수 있습니다.
메타스페이스
- 메타스페이스는 새로운 메모리 공간입니다.
- 오래된 PermGen 메모리 공간을 대체했습니다.
- 이제 메모리 할당을 처리할 수 있습니다.
- 메타스페이스는 기본적으로 자동으로 커집니다.
간단하게 하기 위해서.
PermGen이란 : PermGen에 대해서클래스 메타데이터는 여기에 로드됩니다.java 7 : PermGen은 JVM이 로드된 클래스의 메타데이터를 추적하는 공간입니다.
8 : 되었습니다.java 8 : PermGen met Metaspace 。
언급URL : https://stackoverflow.com/questions/27131165/what-is-the-difference-between-permgen-and-metaspace
'programing' 카테고리의 다른 글
경로가 변경될 때마다 Vuex Getters 중복 키 (0) | 2022.11.06 |
---|---|
인식할 수 없는 문 유형입니다.(위치 0의 "WITD" 근처) (0) | 2022.11.06 |
SQL/MariaDB INSERT 결과를 얻는 방법 (0) | 2022.11.06 |
Larabel 5에 외부 CSS 및 JS 파일을 포함하는 방법 (0) | 2022.11.06 |
Java에서 포인터를 사용하려면 어떻게 해야 하나요? (0) | 2022.10.27 |