Java堆的标准分配比率

我试图寻找这个问题的答案,但从来没有找到任何答案。

在定义最大堆大小时,为Java GC空间分配大小的标准比率是多少?

那就是:如果我用堆栈的4Gb启动我的JVM,那么分配给Eden的数量是多少? 幸存者多少钱? 天赋多少钱?

此外,不同VM供应商的比率是否会发生变化?

提前致谢

这是特定于JVM的。 在Oracle的JVM上,您可以使用-XX:+PrintCommandLineFlags -XX:+PrintGCDetails找到堆大小-XX:+PrintCommandLineFlags -XX:+PrintGCDetails

 $ java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version -XX:InitialHeapSize=78820288 -XX:MaxHeapSize=1261124608 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseParallelGC java version "1.7.0_09" Java(TM) SE Runtime Environment (build 1.7.0_09-b05) Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode) Heap PSYoungGen total 22464K, used 770K [0x000000013e820000, 0x0000000140130000, 0x0000000157970000) eden space 19264K, 4% used [0x000000013e820000,0x000000013e8e0b08,0x000000013faf0000) from space 3200K, 0% used [0x000000013fe10000,0x000000013fe10000,0x0000000140130000) to space 3200K, 0% used [0x000000013faf0000,0x000000013faf0000,0x000000013fe10000) ParOldGen total 51328K, used 0K [0x000000010c570000, 0x000000010f790000, 0x000000013e820000) object space 51328K, 0% used [0x000000010c570000,0x000000010c570000,0x000000010f790000) PSPermGen total 21248K, used 2165K [0x0000000107370000, 0x0000000108830000, 0x000000010c570000) object space 21248K, 10% used [0x0000000107370000,0x000000010758d6a8,0x0000000108830000) 

由此,您可以轻松计算出比率。