1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 043 JVM实战总结:动手实验 自己动手模拟出频繁Young GC的场景

043 JVM实战总结:动手实验 自己动手模拟出频繁Young GC的场景

时间:2018-12-04 22:44:38

相关推荐

043 JVM实战总结:动手实验 自己动手模拟出频繁Young GC的场景

1、前文回顾 -之前讲原理,本周讲GC日志

2、程序的JVM参数示范 -见3

3、如何打印出JVM GC日志?

-XX:NewSize=5242880 -XX:MaxNewSize=5242880 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:SurvivorRatio=8

-XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps

-Xloggc:gc.log

注意:设置了-Xloggc后-XX:+PrintGCDetails就不生效了

4、示例程序代码

5、对象是如何分配在Eden区内的 -见思考题

6、采用指定JVM参数运行程序

-Xloggc:d:/gc.log ,查看日志d:/gc.log

idea:

命令行:

java com.yh.stu.jvm.zero2master._43YoungGC -Xms10m -XX:NewSize=5242880 -XX:MaxNewSize=5242880 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:SurvivorRatio=3 -Xloggc:gcd.log

7、今日思考题

这次Young GC到底是如何运行的?

思考题回答:

参数设置:

参数设置了堆大小为10M,指定了新生代5M ,那么老年代也是5M,因为SurvivorRatio=8,所以Eden区4M,S1、S2分别是0.5M。

GC前的空间分配及判断:

先分配了3次1M对象进入Eden区,再次分配2M时,Eden区放不下了,准备进行YoungGC,此时需要判断是否需要空间担保,5M的老年代空余>3M的新生代已用空间,不需要空间担保。直接进行YoungGC。

执行YoungGC:

遍历所有线程栈中的和静态的引用变量,进行GCRoots追踪,发现新生代的Eden和S1区没有对象存活,不需要进行对象的拷贝,直接清空Eden区和S1区。此时YoungGC执行完成。

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。详细内容:

购买成功后找我返现10元

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。