问一个JVM的问题,测试结果跟自己的理解有误

public class Test {  public static final int MB = 1024 * 1024;  public static void main(String[] args) throws InterruptedException {  byte[] a1 = new byte[2 * MB];  byte[] a2 = new byte[2 * MB];  byte[] a3 = new byte[2 * MB];  byte[] a4 = new byte[2 * MB];  }
}
参数设置: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
结果如下:
[GC (Allocation Failure) [PSYoungGen: 7127K->648K(9216K)] 7127K->6800K(19456K), 0.0042678 secs] [Times: user=0.03 sys=0.02, real=0.00 secs]  [Full GC (Ergonomics) [PSYoungGen: 648K->0K(9216K)] [ParOldGen: 6152K->6670K(10240K)] 6800K->6670K(19456K), [Metaspace: 2594K->2594K(1056768K)], 0.0074118 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]  Heap  PSYoungGen      total 9216K, used 2130K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)   eden space 8192K, 26% used [0x00000000ff600000,0x00000000ff814930,0x00000000ffe00000)   from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)   to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)  ParOldGen       total 10240K, used 6670K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)   object space 10240K, 65% used [0x00000000fec00000,0x00000000ff283bf8,0x00000000ff600000)  Metaspace       used 2600K, capacity 4486K, committed 4864K, reserved 1056768K   class space    used 288K, capacity 386K, committed 512K, reserved 1048576K

新生代采用的是 Parallel Scavenge,书上说是 标记复制算法
那么a1,a2,a3分配到了 Eden区,当分配a4的时候发觉Eden不够空间了,那么进行新生代GC,
那么新生代的对象就晋升到了老年代嘛,那么新生代完全足够容得下a4。 为何还要进行一次Full GC。


周志明老师的那本《深入理解Java虚拟机》第93页的那个实验,也没有发生Full GC。所以为啥呢?

ps. jdk版本为1.8
#测试#
全部评论
[ParOldGen: 6152K->6670K(10240K)] 这条的原因?老年代有空间占用了,minorgc要检查老年代的剩余空间决定要不要fullgc。
点赞 回复 分享
发布于 2018-07-21 18:31
牛客的代码排版好像出bug了
点赞 回复 分享
发布于 2018-07-21 17:56

相关推荐

Eeeeevans:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务