jvm新生代给10M E:S是8:1 为什么创建三个2M的数组时,新生代就占用了8000K+?

        /**
         * -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多一点?

新生代:老生带 1:2;新生代中E:S1:S2=8:1:1; 看你配置的新生代:老生代=1:1;
你的s区都是1M,你的对象是2M,无法放下,会自动进入old;所以是共使用8000k+;
途中显示total 9216K, used 8192K代表新生代所有的小格空间满了,不代表真实内存使用了所有(内存空间分配是把总内存分为N个小的内存方格,当内存空间的可用空间间隙不足以放入下一个对象时,就是100%使用)