深入JVM内核—原理与优化之gc参数学习

本文深入探讨了Java垃圾回收的不同策略,包括串行回收器、并行收集器、Parallel收集器及CMS收集器的特点与配置参数,同时提供了优化GC性能的建议。

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

堆:
新生代+老年代;
新生代(Eden+s0+s1);

串行回收器算法:
最古老、最稳定、效率高;
可能会有较长时间的停顿;
-XX:UserSerialGC
- 新生代、老年代使用串行回收;
-新生代复制算法;
-老年代标记-压缩;

并行收集器:
ParNew收集器
-XX:+UseParNewGC
新生代并行;
老年代串行;
- Serial收集器新生代的并行版本
- 复制算法
- 多线程,需要多和支持
- -XX:ParallelGCThreads 限制线程数量

Parallel收集器
类似ParNew;
新生代复制算法,老年代标记压缩算法;
更加关注吞吐量;
-XX:+UseParallelGC
使用Parallel收集器+老年代串行
-XX:+UserParallelOldGC
使用Parallel收集器+并行老年代
参数:
-XX:MaxGCPauseMills
最大停顿时间,单位秒;
-XX:GCTimeRatio
垃圾收集时间占比;
两个值是矛盾的;停顿时间和吞吐量之间的调优;

CMS收集器
并发 标记清除算法;
与标记-压缩相比;
并发阶段会降低吞吐量;(应用程序的线程资源会被GC线程占用掉一部分)
老年代收集器(新生代使用ParNew);
-XX:+UserConcMarkSweepGC
过程比较复杂,着重实现标记:
初始标记(STW):只标记根对象的可达对象,快
*并发标记(和用户线程一起);主要标记过程,标记全部对象;
重新标记(STW);工作量小,并发标记的补充;
并发清除(和用户线程一起);清除不压缩;
特点:
尽可能降低停顿
会影响系统整体的吞吐量和性能;
清理不彻底;
和用户线程一起执行,不能再空间快满时再清理;
concurrent mode failure; (使用串行)
-XX:+UseCMSCompactAtFullCollection, Full GC后进行一次整理;
-XX:+CMSFullGCsBeforeCompaction,几次GC后进行一次碎片整理
-XX:ParallelCMSThreads,设定CMS的线程数量

为减轻GC压力,需要注意:
软件设计架构
代码如何写
堆空间如何分配:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值