为什么JVM总分配内存大于-Xmx?

Lip*_*ang 6 java memory jvm-arguments

JVM选项:

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

正如预期的那样,JVM将为JVM堆分配近20MB的内存.

但请参阅以下GC详细信息:

PSYoungGen总计9216K,使用4612K [0x00000000ff600000,0x0000000100000000,0x0000000100000000]
eden space 8192K,56%使用[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000]
来自空间1024K,0%使用[0x00000000fff00000,0x00000000fff00000,0x0000000100000000]
空间 1024K,0%使用[0x00000000ffe00000 ,0x00000000ffe00000,0x00000000fff00000)
PSOldGen总计10240K,使用8192K [0x00000000fec00000,0x00000000ff600000,0x00000000ff600000]
对象空间10240K,80%使用[0x00000000fec00000,0x00000000ff400020,0x00000000ff600000] PSPermGen总计21248K,使用3033K [0x00000000f9a00000,0x00000000faec0000,0x00000000fec00000]
对象空间21248K,14 %used [0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)

年轻一代的规模与期权的预期一致-Xmn.尺寸为比伊甸园空间生存空间年轻一代如预期的那样的选项-XX:SurvivorRatio=8.似乎JVM总共分配了近40MB的内存,所以很奇怪.为什么JVM总分配内存大于-Xmx

ENV:

操作系统:win7 64位

JDK:构建1.6.0_43-b01 64位

pie*_*t.t 11

-Xmx设置HotSpot对象堆的最大大小,即YoungGen(Eden + Survivor-spaces)和OldGen的总和,大约为20 MB.永久生成驻留在此堆外部的单独内存区域中,该内存区域通过该-XX:MaxPermSize选项进行控制.