【问题标题】:Why is the JVM total allocated memory greater than -Xmx?为什么JVM总分配的内存大于-Xmx?
【发布时间】:2014-01-11 10:37:59
【问题描述】:

JVM 选项:

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

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

但是请看下面的 GC 细节:

psyounggen总共9216kg ,二手4612K [0x00000000FF600000,0x0000000100000000,0x0000000100000000,0x0000000100000000,0x0000000100000000)
伊甸园空间8192k ,56%使用了[0x00000000FFF600000,0x0000000000FFA812d8,0x00000000ffe00000)
从空间1024k ,0%使用[0x00000000FF00000,0x000000000000000000000 0x000000000100000000)
到空间 1024k,0%使用[0x00000000FFFE00000,0x0000000000FF00000)
PSOldGen 总计 10240K,使用了 8192K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
对象空间 10240K,已使用 80% [0x00000000fec00000,0x00000000ff400020,0x00000000ff600000) PSPermGen 总计 21248K,已使用 3033K [0x00000000f9a00000, 0x00000000faec0000, 0x00000000fec00000)
对象空间 21248K,已使用 14% [0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)

年轻一代的大小与选项 -Xmn 的预期一致。 年轻一代eden空间幸存者空间的大小比率与选项-XX:SurvivorRatio=8的预期一致。 但是看来 JVM 总共分配了将近 40MB 内存,所以很奇怪。为什么JVM总分配内存大于-Xmx

环境:

操作系统:win7 64 位

JDK:构建 1.6.0_43-b01 64 位

【问题讨论】:

    标签: java memory jvm-arguments


    【解决方案1】:

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

    【讨论】:

    • so表示堆分为两代:YoungGen和OldGen,不包含PermGen?
    • @LipingHuang 是的,没错。堆分为young generationPSYoungGenold generationPSOldGen。堆不包含永久代PSPermGen。顺便说一句,PS 代表 parallel scavenge collector(使用-XX:UseParallelGC 启用)。
    • @LipingHuang 年轻一代又分为eden空间和称为的两个幸存者空间 >从空间到空间。然而,只有一个 幸存者空间年轻一代 的规定规模有贡献,正如 here 所讨论的那样。
    • @LipingHuang 如果您想知道为什么总堆大小 (PSYoungGen total 9216K + PSOldGen total 10240K = 19456K = 19MB) 小于 -Xms20M 指定的最小堆大小,请查看讨论here.
    • @DontDivideByZero 链接帖子已删除。还有其他参考资料吗?
    猜你喜欢
    • 2021-11-17
    • 2012-04-01
    • 2017-11-20
    • 2012-08-30
    • 1970-01-01
    • 2011-02-20
    • 2014-03-04
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多