1.G1特点
从jdk9开始,CMS就被弃用,使用G1代替CMS,同时注重高吞吐和低延时的特点,默认的暂停目标是200ms。超大堆内存,会将堆划分为多个大小相等的region。整体上是标记整理算法,两个区域之间是复制算法。
怎么理解同时注重高吞吐量和低延时?
G1采用了一系列的措施来实现高吞吐和低延时
1.区域化管理:G1将整个堆划分为多个region,每个region都可以是伊甸园区、幸存区、老年代区。这种细粒度划分更有助于对每个区域有针对性地进行垃圾回收。减少每次回收的范围,提高吞吐量。
2.智能优先级调整:G1会根据垃圾回收情况动态调整垃圾回收的优先级,每次回收时都选取垃圾最多的区域,这样就有利于在规定的时间内提高吞吐量。为什么叫G1,优先回收垃圾最多的区域。
3.并发阶段。
2.垃圾回收器的三个阶段
1.Young Collection(First)
刚开始都是小区域的白色的未使用的内存,随着对象的创建,这些对象会被放入伊甸园区,当这个内存逐渐被占满,那这个时候会进行一次垃圾回收,这个时候会将Eden区复制进幸存区(两个区域之间使用复制算法)并对这个对象赋值年龄。幸存区的对象逐渐占满,这个时候又触发一次垃圾回收,如果年龄达到了15,就会被放进老年代。如果没有满的对象被复制进其他的幸存区。这就是新生代垃圾回收。
2.Young Collection+Concurrent Mark
(1).在Young GC时会进行GC Root的初始标记
3.Maxed Collection
这里会有一个问题就是什么时候触发呢?(老年代达到一定的阈值)
当老年代占用堆空间比例达到阈值时,进行并发标记(不会STW),由下面的JVM参数决定
-XX:InitiatingHeapOccupancyPercent=percent(默认45%)
会对E、S、O进行全面的垃圾回收
1.最终标记(Remark)会STM
2.复制存活对象(会STM)