JVM-CMS回收器-GC日志分析

本文详细介绍了CMS垃圾回收器的工作原理,包括它的七个执行阶段,并提供了相关JVM参数。通过分析CMS GC日志,展示了如何使用工具进行日志可视化,以帮助理解GC行为。在实战分析中,讨论了性能测试期间一个应用频繁CMS GC的问题,指出关键的性能指标和解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


简单介绍

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: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值