Java PSYoungGen有错误的空间

Java PSYoungGen有错误的空间,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,我测试了一些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(){

我测试了一些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参数

-详细信息:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8

gc日志

[GC(分配失败)[PSYoungGen:6794K->990K(9216K)] 6794K->5094K(19456K),0.0041458秒][次:用户=0.00系统=0.00, real=0.00秒]堆PSYoungGen总计9216K,使用7372K [0x00000000ff600000,0x0000000100000000,0x0000000100000000)伊甸园 空间8192K,使用率77% [0x00000000ff600000,0x00000000ffc3b718,0x00000000FF00000)来自 空间1024K,使用率为96% [0x00000000FF00000,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”

引用您的日志

... eden space 8192K, 77% used ...
... from space 1024K, 96% used ...
... to space 1024K, 0% used ...
年轻空间
-Xmn
是伊甸园、S0和S1的总和(
from
to
与S0和S1相同,尽管S0有一半集合的
from
角色和其他集合的
to
角色,S1相同)

eden
+
+
=预期的10MB

尽管如此,由于,
空间在任何时候都应该是零利用率,所以年轻空间的有效容量是
伊甸园
+
到9 MiB

不过,一般来说,一些GC变体可以动态调整年轻空间大小(仅与
-Xmn
相比减少),因此运行时的有效年轻空间可能比配置的小