2013-12-23 3 views
6

JVM 옵션은 :JVM 총 할당 메모리가 -Xmx보다 큰 이유는 무엇입니까?

예상대로

-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8

, JVM은 JVM 힙 거의 20메가바이트 메모리를 할당합니다.

있지만 다음 GC 세부 참조주세요

PSYoungGen 전체를 9216K [0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000 사용 4612K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
에덴 공간 8192K, 56 % 사용) 공간에서 1024K
, 0 % 내지 S [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
사용 속도 1024K, 0 % 사용 [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
PSOldGen 총 8192K 사용 10240K는 [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
오브젝트 공간 10240K 80 % 사용 [0x00000000fec00000,0x00000000ff400020,0x00000000ff600000) PSPermGen 21248K 총 14 %가 [0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)

의 크기를 사용 3033K [0x00000000f9a00000, 0x00000000faec0000, 0x00000000fec00000)
오브젝트 공간 21248K 사용 젊은 세대-Xmn 옵션에서 예상대로입니다. eden 공간생존 공간 공백에 대한 어린 세대의 크기 비율은 -XX:SurvivorRatio=8에 대해 예상 한 것과 같습니다. 그러나은 JVM이 거의 40MB 메모리를 할당 한 것으로 보입니다. 그래서 이상합니다. 왜 JVM 총 할당 메모리가 -Xmx보다 큰가요?

봉투 :

OS : WIN7 64 비트

JDK : 빌드 1.6.0_43-B01 64 비트

답변

11

-Xmx 핫스팟 객체 |의 최대 크기를 설정하고, 그 합은 YoungGen (Eden + Survivor-spaces) 및 OldGen의 약 20MB입니다. 영구 생성은 -XX:MaxPermSize 옵션을 통해 제어되는 별도의 메모리 영역에서이 힙 외부에 있습니다.

+0

이렇게하면 힙이 두 세대로 나누어 져 있음을 의미합니다. YoungGen과 OldGen에는 PermGen이 포함되어 있지 않습니까? –

+0

@LipingHuang 예, 맞습니다. 힙은 * 젊은 세대 *,'PSYoungGen' 및 * 구세대 *,'PSOldGen'로 구분됩니다. 힙에는 * 영구 생성 *,'PSPermGen'이 없습니다. 그건 그렇고,'PS'는 병렬 수집 청소기 * ('-XX : UseParallelGC'를 사용 가능)를 의미합니다. – DontDivideByZero

+0

@LipingHuang * 젊은 세대 *는 * 에덴 공간 *과 * 우주 * 및 * 우주 *로 알려진 * 생존자 공간 *으로 나뉩니다.그러나 ** 생존자 공간 중 하나만 * 젊은 세대의 명시된 크기에 기여합니다. *** 여기에 설명되어 있습니다 (http://stackoverflow.com/q/28347161/3460717). – DontDivideByZero