[java] -XX : MaxPermSize의 기능은 무엇입니까?

특히, PermGen OutOfMemoryError 문제를 해결하는 데 왜 도움이됩니까?

또한 JVM 인수에 대한 문서를 알려주는 답변에 대한 보너스 포인트 …



답변

영구 공간은 VM에서 사용하는 클래스, 메서드, 내부화 된 문자열 및 이와 유사한 객체가 저장되고 할당 해제되지 않는 곳입니다 (따라서 이름).

이 Oracle 기사 는 HotSpot GC의 작동 및 매개 변수화를 간결하게 제시하고 많은 클래스를로드 할 경우이 공간을 늘리도록 조언합니다 (일반적으로 애플리케이션 서버 및 Eclipse와 같은 일부 IDE의 경우).

영구 생성은 대부분의 응용 프로그램에서 가비지 수집기 성능에 눈에 띄는 영향을 미치지 않습니다. 그러나 일부 응용 프로그램은 많은 클래스를 동적으로 생성하고로드합니다. 예를 들어, JSP (JavaServer Pages) 페이지의 일부 구현. 이러한 응용 프로그램은 추가 클래스를 보유하기 위해 더 큰 영구 생성이 필요할 수 있습니다. 그렇다면 명령 행 옵션 -XX : MaxPermSize =를 사용하여 최대 영구 생성 크기를 늘릴 수 있습니다.

참고 이 다른 오라클 문서 목록이 다른 핫스팟 인수.

업데이트 : Java 8부터는 permgen 공간과이 설정이 모두 사라졌습니다. 로드 된 클래스 및 메소드에 사용되는 메모리 모델은 다르며 제한되지 않습니다 (기본 설정 사용). 더 이상이 오류가 표시되지 않아야합니다.


답변

-XX:PermSize -XX:MaxPermSize 영구 생성의 크기를 설정하는 데 사용됩니다.

영구 생성 : 영구 생성은 클래스 파일이 보관되는 곳입니다. 컴파일 된 클래스 및 JSP 페이지의 결과입니다. 이 공간이 가득 차면 전체 가비지 콜렉션이 트리거됩니다. 전체 가비지 콜렉션이 참조되지 않은 오래된 클래스를 정리할 수없고 영구 공간을 확장 할 공간이 없으면 메모리 부족 오류 (OOME)가 발생하고 JVM이 중단됩니다.


답변

Java 8에서이 매개 변수는 일반적으로 다음과 같은 경고 메시지를 인쇄하는 데 사용됩니다.

Java HotSpot ™ 64 비트 서버 VM 경고 : 옵션 MaxPermSize = 512m 무시 8.0에서 지원이 제거되었습니다.

Java 8에서이 메시지가 표시되는 이유는 Permgen이 일부 PermGen의 단점을 해결하기 위해 메타 스페이스로 대체 되었기 때문입니다.

참고 : 메타 스페이스 관련 기사 : http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


답변