2012-08-24 1 views
189

특히 PermGen OutOfMemoryError 문제를 해결하는 데 도움이되는 이유는 무엇입니까?-XX : MaxPermSize의 기능은 무엇입니까?

또한

, JVM 인수에 대한 설명서에 저를 가리키는 답변에 대한 보너스 포인트 ...

+0

http://mark.koli.ch/2009/01/understanding-javas-perm-gen-maxpermsize-heap-space-etc.html –

+5

http://www.oracle.com/technetwork/java/javase /tech/vmoptions-jsp-140102.html 지금 보너스 포인트를 어떻게 내게 줄 수 있습니까?:) –

+1

@PaulTomblin 나는 당신이 연결하고있는 기사 (구글의 첫 번째 결과)를 가진 사람이 자신이 말하는 것에 대해 잘 모른다. –

답변

207

클래스는, 방법, VM에 의해 사용 내면화 문자열 및 유사한 객체가 저장되는 위치를 영구 공간이며, 절대로 할당 취소되지 않았습니다 (따라서 이름).

This Oracle article 간결 핫스팟 GC의 작동 및 파라미터를 제공하고 많은 클래스를로드하는 경우 (이 일반적으로 애플리케이션 서버의 경우와 이클립스와 같은 일부 IDE입니다)이 공간을 증가시키기 위해 조언 :

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

this other Oracle documentation에는 다른 HotSpot 인수가 나열되어 있습니다.

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

75

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

영구 생성 : 영구 생성은 클래스 파일이 보관되는 곳입니다. 이것은 컴파일 된 클래스 및 JSP 페이지의 결과입니다. 이 공간이 가득 차면 전체 가비지 콜렉션이 트리거됩니다. 전체 가비지 콜렉션이 이전에 참조되지 않은 클래스를 지울 수없고 영구 공간을 확장 할 공간이없는 경우 Out-of-Memory 오류 (OOME)가 발생하고 JVM이 충돌합니다.

매개 변수는 일반적으로 같은 경고 메시지를 인쇄하는 데 사용되는 자바 8에서
+9

특정 오류 및 발생 일정에 대해서는 +1입니다. – Tony

35

이 하나

자바 핫스팟 (TM) 64 비트 서버 VM 경고 : 옵션을 무시 를 MaxPermSize = 512m; 지원

8.0에서 제거

Permgen 당신이 자신을 볼 수 있었다으로, 그 단점 중 하나는 PermGen의 단점 중 일부를 (해결하기 위해 Metaspace로 대체 되었기 때문에 자바 8이 메시지 이유는 고정 된 크기를 가짐).

는 FYI : Metaspace에 문서 : http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html

+2

참고 사항 : [JDK 8의 PermGen 제거] (http://stackoverflow.com/questions/18339707/permgen-elimination-in-jdk-8) (stackoverflow). – will

1

를 MaxPermSize 영구 생성 힙의 최대 크기, 클래스의 바이트 코드를 유지하고, 실제의 인스턴스를 포함하는 개체 힙으로부터 분리 유지 힙이다.