답변:
이러한 주장을 무시하는 이유는 다음과 같은 단점으로 인해 JDK8 용 HotSpot에서 영구 생성이 제거되었습니다.
Perment Generation (Perment Generation) 공간이 완전히 제거되었으며 메타 스페이스라는 새로운 공간으로 대체되었습니다. PermGen 제거 결과는 분명히 PermSize 및 MaxPermSize JVM 인수가 무시 되며 java.lang.OutOfMemoryError : PermGen 오류가 발생하지 않습니다.
MetaSpace의 장점
메타 스페이스 튜닝
최대 메타 스페이스 크기는 -XX : MaxMetaspaceSize 플래그를 사용하여 설정할 수 있으며 기본값은 무제한이므로 시스템 메모리 만 제한됩니다. -XX : MetaspaceSize 조정 플래그는 메타 스페이스의 초기 크기를 정의합니다.이 플래그를 지정하지 않으면 메타 스페이스는 런타임시 응용 프로그램 요구에 따라 동적으로 크기가 조정됩니다.
변화는 미래에 다른 최적화와 기능을 가능하게합니다
GC 성능도 향상되었습니다. 자세한 세부 사항
이것은 JDK Enhancement Proposals 122의 일부인 Java 8의 새로운 기능 중 하나입니다 .
핫스팟 JVM에서 영구 생성을 제거하므로 영구 생성의 크기를 조정해야합니다.
Java 8에 포함될 모든 JEP 목록은 JDK8 마일스톤 페이지 에서 찾을 수 있습니다 .
Perment (Permanent Generation) 공간이 완전히 제거되었으며 메타 스페이스라는 새로운 공간으로 대체되었습니다. PermGen 제거의 결과는 분명히 PermSize 및 MaxPermSize JVM 인수가 무시되고 java.lang.OutOfMemoryError
: PermGen 오류가 발생 하지 않습니다 .
JDK 8 HotSpot JVM은 이제 클래스 메타 데이터를 표현하기 위해 기본 메모리를 사용하고 있으며이를 메타 스페이스라고합니다. 더 읽기 >>
PermGen 공간이 제거 되었기 때문입니다. 메모리 관리가 약간 변경되었습니다.
PermGen 공간은 Java 8에서 MetaSpace로 대체됩니다. PermSize 및 MaxPermSize JVM 인수는 무시되고 시작시 존재하는 경우 경고가 발행됩니다.
클래스 메타 데이터에 대한 대부분의 할당은 이제 기본 메모리에서 할당됩니다. * 클래스 메타 데이터를 설명하는 데 사용 된 클래스가 제거되었습니다.
이전 PermGen과 새로운 MetaSpace의 주요 차이점은 메모리 사용량의 상한을 강제로 정의 할 필요가 없다는 것입니다. MetaSpace 공간 제한을 무제한으로 유지할 수 있습니다. 따라서 메모리 사용량이 증가하면 OutOfMemoryError 오류가 발생하지 않습니다. 대신 예약 된 기본 메모리가 증가하여 메모리 사용량이 가득 찼습니다.
MetaSpace에 대한 최대 공간 제한을 정의하면 OutOfMemoryError : Metadata space가 발생합니다. 따라서 메모리 낭비를 피할 수 있도록이 제한을 신중하게 정의하는 것이 중요합니다.
Java 8에 대한 Oracle의 JVM 구현은 PermGen 모델을 제거하고 Metaspace 로 대체했습니다 .