JDK 8의 PermGen 제거
JDK 8을 설치하고 Eclipse를 실행하려고했습니다. 다음과 같은 경고 메시지가 나타납니다.
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
이 VM 옵션을 무시하는 이유는 무엇입니까?
이러한 주장을 무시하는 이유는 다음과 같은 단점으로 인해 JDK8 용 HotSpot에서 영구 생성이 제거되었습니다.
- 시작시 고정 크기 – 조정하기 어렵습니다.
- 내부 핫스팟 유형은 Java 객체였습니다. 완전 GC로 이동할 수 있습니다. 불투명하고 강력한 유형이 아니며 디버깅하기 어려운 메타 메타 데이터가 필요합니다.
- 전체 콜렉션 단순화 : 각 콜렉터의 메타 데이터에 대한 특수 반복자
- GC 일시 정지 중에가 아닌 클래스 데이터를 동시에 할당 해제하려고 함
- PermGen에 의해 제한되었던 향후 개선을 가능하게합니다.
Perment Generation (Perment Generation) 공간이 완전히 제거되었으며 메타 스페이스라는 새로운 공간으로 대체되었습니다. PermGen 제거 결과는 분명히 PermSize 및 MaxPermSize JVM 인수가 무시 되며 java.lang.OutOfMemoryError : PermGen 오류가 발생하지 않습니다.
MetaSpace의 장점
- Java 언어 사양 속성 활용 : 클래스 및 관련 메타 데이터 수명은 클래스 로더와 일치합니다.
- 로더 당 저장 영역 – 메타 스페이스
- 선형 할당 만
- 개별 교정 없음 (RedefineClasses 및 클래스 로딩 실패 제외)
- GC 스캔 또는 압축 없음
- 메타 스페이스 객체를 재배치하지 않음
메타 스페이스 튜닝
최대 메타 스페이스 크기는 -XX : MaxMetaspaceSize 플래그를 사용하여 설정할 수 있으며 기본값은 무제한이므로 시스템 메모리 만 제한됩니다. -XX : MetaspaceSize 조정 플래그는 메타 스페이스의 초기 크기를 정의합니다.이 플래그를 지정하지 않으면 메타 스페이스는 런타임시 응용 프로그램 요구에 따라 동적으로 크기가 조정됩니다.
변화는 미래에 다른 최적화와 기능을 가능하게합니다
- 응용 프로그램 클래스 데이터 공유
- 젊은 컬렉션 최적화, G1 클래스 언로드
- 메타 데이터 크기 감소 및 내부 JVM 풋 프린트 프로젝트
GC 성능도 향상되었습니다. 자세한 세부 사항
이것은 JDK Enhancement Proposals 122의 일부인 Java 8의 새로운 기능 중 하나입니다 .
핫스팟 JVM에서 영구 생성을 제거하므로 영구 생성의 크기를 조정해야합니다.
Java 8에 포함될 모든 JEP 목록은 JDK8 마일스톤 페이지 에서 찾을 수 있습니다 .
Perment (Permanent Generation) 공간이 완전히 제거되었으며 Metaspace라는 새로운 공간으로 대체되었습니다. PermGen 제거의 결과는 분명히 PermSize 및 MaxPermSize JVM 인수가 무시되고 java.lang.OutOfMemoryError
: PermGen 오류가 발생 하지 않습니다 . JDK 8 HotSpot JVM은 이제 클래스 메타 데이터를 표현하기 위해 기본 메모리를 사용하고 있으며이를 메타 스페이스라고합니다. 더 읽기 >>
PermGen 공간이 제거 되었기 때문입니다. 메모리 관리가 약간 변경되었습니다.
http://java.dzone.com/articles/java-8-permgen-metaspace
PermGen 공간은 Java 8에서 MetaSpace로 대체됩니다. PermSize 및 MaxPermSize JVM 인수는 무시되고 시작시 존재하는 경우 경고가 발행됩니다.
클래스 메타 데이터에 대한 대부분의 할당은 이제 기본 메모리에서 할당됩니다. * 클래스 메타 데이터를 설명하는 데 사용 된 클래스가 제거되었습니다.
이전 PermGen과 새로운 MetaSpace의 주요 차이점은 메모리 사용량의 상한을 강제로 정의 할 필요가 없다는 것입니다. MetaSpace 공간 제한을 무제한으로 유지할 수 있습니다. 따라서 메모리 사용량이 증가하면 OutOfMemoryError 오류가 발생하지 않습니다. 대신 예약 된 기본 메모리가 증가하여 메모리 사용량이 가득 찼습니다.
MetaSpace에 대한 최대 공간 제한을 정의하면 OutOfMemoryError : Metadata space가 발생합니다. 따라서 메모리 낭비를 피할 수 있도록이 제한을 신중하게 정의하는 것이 중요합니다.
Java 8에 대한 Oracle의 JVM 구현은 PermGen 모델을 제거하고 Metaspace 로 대체했습니다 .
참고 URL : https://stackoverflow.com/questions/18339707/permgen-elimination-in-jdk-8
'IT story' 카테고리의 다른 글
프로그래밍 방식으로 번들 식별자 얻기 (0) | 2020.04.25 |
---|---|
PHP“php : // input”vs $ _POST (0) | 2020.04.25 |
비 정적 방법에는 대상이 필요합니다 (0) | 2020.04.25 |
AngularJS-ng-model을 사용하면 입력 텍스트 상자의 값 속성이 무시됩니까? (0) | 2020.04.25 |
div를 나란히 배치하는 방법 (0) | 2020.04.25 |