JVM入门学习笔记——上篇:内存与垃圾回收(17)

文章目录

  • 17、垃圾回收器
    • 一、GC分类与性能指标
      • 垃圾回收器概述
      • 垃圾回收器分类
      • 评估GC的性能指标
        • 吞吐量(throughput)
        • 暂停时间(pause time)
        • 吞吐量 vs 暂停时间
    • 二、不同的垃圾回收器概述
      • 垃圾回收器发展史
      • 7款经典的垃圾收集器
      • 经典的垃圾收集器
      • 7款经典收集器与垃圾分代之间的关系
      • 垃圾收集器的组合关系
      • 查看默认的垃圾收集器
    • 三、Serial回收器:串行回收
    • 四、ParNew回收器:并行回收
    • 五、Parallel回收器:吞吐量优先
    • 六、CMS回收器:低延迟
      • JDK后续版本中CMS的变化
    • 七、G1回收器:区域化分代式
      • 特点(优势)
      • 缺点
      • 参数设置
      • 常见的操作步骤
      • 适用场景
      • 分区Region:化整为零
      • 垃圾回收过程
        • 记忆集(Remembered Set(RSet))
        • G1回收过程一:年轻代GC
        • G1回收过程二:并发标记过程
        • G1回收过程三:混合回收
        • G1回收可选的过程四:Full GC
        • G1回收过程:补充
      • G1回收器优化建议
    • 八、垃圾回收器总结
      • 7种经典垃圾回收器总结
      • 垃圾回收器组合
      • 怎么选择垃圾回收器?
      • 面试
    • 九、GC日志分析
      • JDK1.7和JDK1.8堆空间内存分配的区别
        • JDK1.7
        • JDK1.8
      • GC日志文件导出及查看
    • 十、垃圾回收器的新发展
      • JDK11新特性
      • Open JDK12的Shenandoah GC
      • ZGC
      • JDK14新特性
      • AliGC
      • 其他垃圾回收器

17、垃圾回收器

一、GC分类与性能指标

垃圾回收器概述

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第1张图片

垃圾回收器分类

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第2张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第3张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第4张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第5张图片

评估GC的性能指标

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第6张图片

  • 吞吐量:程序运行时间 / 总运行时间
  • 暂停时间:STW,用户线程不工作。
  • 内存占用:堆占用的内存大小。

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第7张图片

吞吐量(throughput)

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第8张图片

暂停时间(pause time)

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第9张图片

吞吐量 vs 暂停时间

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第10张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第11张图片

二、不同的垃圾回收器概述

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第12张图片

垃圾回收器发展史

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第13张图片

7款经典的垃圾收集器

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第14张图片

经典的垃圾收集器

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第15张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第16张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第17张图片
官方文档:https://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf

7款经典收集器与垃圾分代之间的关系

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第18张图片

垃圾收集器的组合关系

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第19张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第20张图片

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第21张图片

查看默认的垃圾收集器

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第22张图片
-XX:+PrintCommandLineFlags

三、Serial回收器:串行回收

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第23张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第24张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第25张图片
-XX:+UseSerialGC:表明新生代使用 Serial GC,同时老年代使用 Serial Old GC。
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第26张图片

四、ParNew回收器:并行回收

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第27张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第28张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第29张图片
-XX:+UseParNewGC:表明新生代使用ParNew GC。

五、Parallel回收器:吞吐量优先

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第30张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第31张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第32张图片
在这里插入图片描述
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第33张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第34张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第35张图片
-XX:+UseParallelGC:表明新生代使用Parallel GC。
-XX:+UseParallelOldGC:表明老年代使用Parallel Old GC。
两者相互激活,打开其中一个, 另一个也跟着被打开

六、CMS回收器:低延迟

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第36张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第37张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第38张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第39张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第40张图片

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第41张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第42张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第43张图片
个人理解:

  • 初始标记:只标记GC Roots,没去标记引用链,为了低延迟,此时STW。
  • 并发标记:标记GC Roots对应的引用链,此时与用户线程并行运行。
  • 重新标记:因为上一阶段是和用户线程并行运行的,所以在初始标记和并发标记阶段的被标记对象可能会变成垃圾,或者重新被引用,所以需要对被标记的对象重新进行标记,但无法处理浮动垃圾,此时STW。
  • 浮动垃圾:指在并发标记阶段,新生成的垃圾,重新标记阶段无法处理。


JVM入门学习笔记——上篇:内存与垃圾回收(17)_第44张图片
-XX:+UseConcMarkSweepGC:表明老年代使用CMS GC,同时,年轻代会被触发使用ParNew GC。

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第45张图片

JDK后续版本中CMS的变化

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第46张图片

七、G1回收器:区域化分代式

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第47张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第48张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第49张图片

特点(优势)

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第50张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第51张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第52张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第53张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第54张图片

缺点

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第55张图片

参数设置

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第56张图片

常见的操作步骤

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第57张图片

适用场景

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第58张图片

分区Region:化整为零

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第59张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第60张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第61张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第62张图片

垃圾回收过程

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第63张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第64张图片

记忆集(Remembered Set(RSet))


JVM入门学习笔记——上篇:内存与垃圾回收(17)_第65张图片

G1回收过程一:年轻代GC

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第66张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第67张图片

在这里插入图片描述

G1回收过程二:并发标记过程

G1回收过程三:混合回收

年轻代每次GC都是对整个进行回收的,而老年代只对部分进行回收。
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第68张图片

G1回收可选的过程四:Full GC

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第69张图片

G1回收过程:补充

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第70张图片

G1回收器优化建议

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第71张图片

八、垃圾回收器总结

7种经典垃圾回收器总结


这里的并行是垃圾回收器线程的并行(此时为STW);这里的并发是垃圾回收器和用户线程并行。
在这里插入图片描述

垃圾回收器组合

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第72张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第73张图片

怎么选择垃圾回收器?

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第74张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第75张图片

面试

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第76张图片

九、GC日志分析

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第77张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第78张图片

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第79张图片
在这里插入图片描述
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第80张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第81张图片

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第82张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第83张图片

JDK1.7和JDK1.8堆空间内存分配的区别

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第84张图片

JDK1.7

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第85张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第86张图片
JDK1.7当分配对象空间,堆空间的年轻代空间不足时,进行GC,如果还内存不够,就会把年轻代的数据转到老年代,然后再分配内存。
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第87张图片

JDK1.8

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第88张图片
而JDK1.8在分配对象内存空间,且堆空间的年轻代空间不足时,进行GC,如果还内存不够,对象的内存空间就直接分配到老年代里。

GC日志文件导出及查看

在这里插入图片描述
-Xloggc:./logs/gc.log:将GC日志文件导出到当前项目目录下的logs目录里。
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第89张图片
GCEasy官网:https://gceasy.io/
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第90张图片

十、垃圾回收器的新发展

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第91张图片

JDK11新特性

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第92张图片
http://openjdk.java.net/jeps/318

Open JDK12的Shenandoah GC

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第93张图片

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第94张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第95张图片

ZGC

https://docs.oracle.com/en/java/javase/12/gctuning/
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第96张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第97张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第98张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第99张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第100张图片
JVM入门学习笔记——上篇:内存与垃圾回收(17)_第101张图片

JDK14新特性

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第102张图片

AliGC

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第103张图片

其他垃圾回收器

JVM入门学习笔记——上篇:内存与垃圾回收(17)_第104张图片

目前JVM这套视频就更新到上篇(p203),等中下篇和面试题出后就把剩下的笔记一起补上。
感谢康师傅,JVM上篇看完后收获很大。

下一篇笔记:待更新
JVM入门学习笔记——中篇:字节码与类的加载
JVM入门学习笔记——下篇:性能监控与调优
JVM入门学习笔记——大厂面试

学习视频(p169-p203):https://www.bilibili.com/video/BV1PJ411n7xZ?p=169

你可能感兴趣的:(JVM)