PermGen과 Metaspace의 차이점은 무엇입니까?


118

Java 7까지는 JVM 메모리에 PermGen 이라는 영역이 있었는데 , JVM이 클래스를 유지하는 데 사용되었습니다. Java 8 에서는 제거되고 Metaspace 라는 영역으로 대체되었습니다 .

PermGen과 Metaspace 의 가장 중요한 차이점 은 무엇입니까 ?

내가 아는 유일한 차이점 java.lang.OutOfMemoryError: PermGen space은 더 이상 던질 수없고 VM 매개 변수 MaxPermSize가 무시 된다는 것 입니다.



@ the8472 예,하지만이 (그리고 다른 많은) 구글 결과는 메타 스페이스 메커니즘만을 설명하고 이것과 PermGen의 정확한 차이점에 대해서는 언급하지 않았습니다.
Kao 2014

답변:


137

사용자 관점과의 주요 차이점은 이전 답변에서 충분히 강조하지 않는다고 생각합니다. 기본적으로 Metaspace는 기본적 으로 크기가 자동으로 증가 하는 반면 PermGen은 항상 최대 크기가 고정되어 있다는 것입니다. JVM 매개 변수를 사용하여 Metaspace에 대해 고정 최대 값을 설정할 수 있지만 PermGen을 자동 증가시킬 수는 없습니다.

대체로 그것은 단지 이름의 변경 일뿐입니다. PermGen이 도입되었을 때는 Java EE 또는 동적 클래스 (언)로드가 없었기 때문에 일단 클래스가로드되면 JVM이 종료 될 때까지 메모리에 고정되어 영구 생성되었습니다. 요즘 클래스는 JVM의 수명 동안로드 및 언로드 될 수 있으므로 메타 스페이스는 메타 데이터가 보관되는 영역에 더 적합합니다.

둘 다 java.lang.Class인스턴스를 포함하고 있으며 둘 다 ClassLoader 누출로 고통받습니다 . 유일한 차이점은 Metaspace 기본 설정을 사용하면 증상을 알아 차릴 때까지 더 오래 걸린다는 것입니다 (가능한 한 자동으로 증가하기 때문에). 즉, 문제를 해결하지 않고 더 멀리 밀어 내기 만하면됩니다. OTOH 저는 OS 메모리 부족의 영향이 JVM PermGen 부족보다 더 심각 할 수 있다고 생각하므로 많이 개선되었는지 확신 할 수 없습니다.

PermGen과 함께 JVM을 사용하든 Metaspace와 함께 사용하든 동적 클래스 언로드를 수행하는 경우 예를 들어 내 ClassLoader 누출 방지 라이브러리를 사용하여 클래스 로더 누출에 대한 조치를 취해야 합니다 .


17
Permgen이나 Metaspace 모두 Class 클래스의 인스턴스를 포함하지 않습니다. 로드 된 클래스에 대한 메타 정보 만 유지합니다. Class 클래스의 인스턴스는 다른 클래스의 인스턴스처럼 일반 힙에 보관됩니다.
평균 Joe

좋은 비교. 감사합니다
Sandeep

1
그건 그렇고, OTOH는 "다른 한편으로는"을 의미합니다
sofs1

43

Bye, Bye PermGen, Hello Metaspace

PermGen 이 완전히 제거되었습니다.

메타 스페이스 가비지 수집 -클래스 메타 데이터 사용량이 .NET Framework에 도달하면 사용 불능 클래스 및 클래스 로더의 가비지 수집이 트리거 MaxMetaspaceSize됩니다.

Metadata보유 된 공간 은 더 이상에 인접하지 않습니다. 이제 Java heapThe metadataMetaspace.

간단히 말해서 ,

클래스 메타 데이터는 기본 메모리에서 할당되므로 사용 가능한 최대 공간은 사용 가능한 총 시스템 메모리입니다. 따라서 더 이상 만나지 않고 OOM errors스왑 공간으로 쏟아 질 수 있습니다.

제거는 PermGen클래스 로더 누수 문제가 사라 졌다는 것을 의미하지 않습니다. 그렇습니다. 누수로 인해 전체 네이티브 메모리가 소모되기 때문에 사용량을 모니터링하고 그에 따라 계획을 세워야합니다.

분석이 포함 된 다른 기사 : Link1 , Link2this


6
MaxPermGen 대신 MaxMetaspaceSize가 있으므로 메모리를 더 많이 사용하거나 더 적게 사용하거나 제어 할 수있는 이유가 없습니다.
Peter Lawrey 2014

2
여기서 우리가 말하는 기억은 무엇입니까? RAM 메모리 또는 HDD 메모리.
Dinesh

1
@Dinesh RAM (내부 메모리)
디트 굽타

10

간단히 말해, 메타 공간 크기는 제한되지 않은 경우 클래스 메타 데이터를로드하는 데 필요한 기본 메모리에서 자동으로 증가합니다. -XX:MaxMetaspaceSize

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