简单介绍
CMS回收器:Concurrent Mark Sweep,分代收集器,它尽可能的优化STW的时机,使GC线程与业务程序线程并行执行,令程序暂停时间大大降低;主流老年代垃圾回收器
-
CMS执行的七个阶段
-
CMS GC相关JVM参数
如果未显式指定 GC 算法,则 JVM 将选择默认算法。在 Java 8及以前 (默认GC 算法是并行Parallel GC)。从Java 9(默认的GC算法是G1 GC)
ParNew回收器:分代收集器, 一款多线程的收集器,采用复制算法,主要工作在 Young 区,整个过程都是 STW 的,常与 CMS 组合使用。
GC日志可视化工具
GCeasy在线分析工具(本文介绍):https://gceasy.io/gc-index.jsp
GCViewer工具
简易教程:https://www.jdkdownload.com/gcviewer_tutorials.html
下载地址:https://github.com/chewiebug/GCViewer/tags
CMS GC日志解读
参考:https://cloud.tencent.com/developer/article/2031790
//jvm参数
-server
-Xms40M
-Xmx40M # 堆内存 40MB
-Xmn20M # 新生代内存 20MB
-XX:SurvivorRatio=8 # eden 区与 survive 区比例为 8:2
-verbose:gc # 在控制台输出 gc 日志
-XX:+PrintGCDetails # 输出 gc 日志详细信息
-XX:+PrintGCDateStamps # 打印日志时间
-XX:+UseConcMarkSweepGC # 启用 CMS
循环创建数组对象:alloc1 alloc2 alloc3 分别占据 4M、2M、4M ,取gc日志分析
新生代GC图解
//gc日志
2021-02-06T12:42:47.116-0800: [GC (Allocation Failure)
//表示年轻代垃圾回收前占用从 15287KB 到回收后占用 17KB,年轻代总大小为 18432KB
2021-02-06T12:42:47.116-0800: [ParNew: