PSYoungGen空间错误

我测试了一些jvm参数以显示GC日志,并发现了一些我不希望的细节,也许是我错了?

public class EdenDemo {

private static final int _1MB = 1024 * 1024;

/**
 * vm arguments:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
 */

public static void testAllocation(){
    byte[] allocation1,allocation2,allocation3,allocation4;
    allocation1 = new byte[2 * _1MB];
    allocation2 = new byte[2 * _1MB];
    allocation3 = new byte[2 * _1MB];
    allocation4 = new byte[4 * _1MB];
}

public static void main(String[] args) {
    testAllocation();
}

}

jvm参数

  

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

gc日志

  

[GC(分配失败)[PSYoungGen:6794K-> 990K(9216K)]   6794K-> 5094K(19456K),0.0041458秒] [时间:user = 0.00 sys = 0.00,   real = 0.00 secs]堆PSYoungGen总计9216K,已用7372K   [0x00000000ff600000、0x0000000100000000、0x0000000100000000)伊甸园   空间8192K,已使用77%   [0x00000000ff600000,0x00000000ffc3b718,0x00000000ffe00000)来自   空间1024K,已使用96%   [0x00000000ffe00000,0x00000000ffef7910,0x00000000fff00000)到
  空间1024K,已使用0%   [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)ParOldGen   总计10240K,已用4104K [0x00000000fec00000,0x00000000ff600000,   0x00000000ff600000)对象空间10240K,已使用40%   [0x00000000fec00000,0x00000000ff002020,0x00000000ff600000)元空间   二手3244K,容量4496K,已提交4864K,保留1056768K类   已用空间350K,容量388K,已提交512K,已预留1048576K

为什么PSYoungGen空间大小是9216k(9M)而不是10M?  我已经设置了“ -Xmn 10M”

zgfjwzwxb 回答:PSYoungGen空间错误

引用日志

... eden space 8192K,77% used ...
... from space 1024K,96% used ...
... to space 1024K,0% used ...

年轻空间-Xmn是eden S0,S1的总和(fromto与S0,S1相同,尽管S0在一半的空间中扮演from集合和其他角色的to角色,与S1相同)。

eden + from + to = 10MiB。

尽管,由于logic of young collectionto空间应始终具有零利用率,因此,年轻空间的有效容量为eden + from,因此为9 MiB。 / p>

尽管如此,总的来说,某些GC变体可以动态调整年轻空间的大小(与-Xmn相比只能减小它),因此在运行时有效的年轻空间可能小于配置的空间。

本文链接:https://www.f2er.com/3120058.html

大家都在问