/**
* -XX:NewSize=10485760 新生代10M
* -XX:MaxNewSize=10485760 最大新生代10M
* -XX:InitialHeapSize=20971520 初始化堆内存20M
* -XX:MaxHeapSize=20971520 最大堆内存20M
* -XX:SurvivorRatio=8 eden和survivor比例8:1 (E区8M 每个S区1M)
* -XX:MaxTenuringThreshold=15 s区超过15岁进入老年代
* -XX:PretenureSizeThreshold=10485760 大对象10M
* -XX:+UseParNewGC 新生代使用ParNew
* -XX:+UseConcMarkSweepGC 老年代使用CMS
* -XX:+PrintGCDetails 打印详细GC日志
* -XX:+PrintGCTimeStamps GC日志带时间
* -Xloggc:gc.log 输出到本地文件
*/
byte[] array1 = new byte[2 * 1024 * 1024];
array1 = new byte[2 * 1024 * 1024];
array1 = new byte[2 * 1024 * 1024];
array1 = null;
上面时我的jvm参数设置和运行的代码 GC日志如下
Java HotSpot(TM) 64-Bit Server VM (25.211-b12) for windows-amd64 JRE (1.8.0_211-b12), built on Apr 1 2019 20:53:26 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16695540k(11690332k free), swap 19185908k(12186860k free)
CommandLine flags: -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=10485760 -XX:MaxTenuringThreshold=15 -XX:NewSize=10485760 -XX:OldPLABSize=16 -XX:PretenureSizeThreshold=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC
Heap
par new generation total 9216K, used 8192K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
eden space 8192K, 100% used [0x00000000fec00000, 0x00000000ff400000, 0x00000000ff400000)
from space 1024K, 0% used [0x00000000ff400000, 0x00000000ff400000, 0x00000000ff500000)
to space 1024K, 0% used [0x00000000ff500000, 0x00000000ff500000, 0x00000000ff600000)
concurrent mark-sweep generation total 10240K, used 0K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
Metaspace used 3143K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 343K, capacity 388K, committed 512K, reserved 1048576K
看到三个数组只有6M 但是jvm日志中显示新生代用了 8192K 请问为什么不是6M多一点?