上篇我们知道垃圾回收机制,接下来,我们具体到垃圾回收器,看看JVM到底有哪些垃圾回收器。
一.GC性能指标
不可能三角
主要矛盾:你要暂停时间短,你就需要频繁GC。但是多次GC,会导致吞吐量低。现在标准:在保证最大吞吐量的前提下,降低暂停的时间
二.七款垃圾回收器
接下来看它们几个的关系图:
说明:
接下来我们分别进行讨论
Serial/Serial Old
ParNew
Parallel/Parallel Old
吞吐量优先,java8默认的垃圾收集器
Parallel采用复制算法,Parallel Old采用标记压缩算法
Parallel与ParNew不同的是,Parallel目的为了达到一个可控的吞吐量,具有自适应调解策略
-XX:+UseAdaptiveSizePolicy: 开启自适应调节策略,年轻代的大小,eden,s的比例,,晋升老年代等参数会自动调节。在手动调优比较困难的情况下,可以开启这种模式
适用于后台运算而不需要太多交互的任务。比如批量处理,订单处理,工资支付,科学计算等
** 三.CMS回收器**
CMS的回收过程:CMS回收器的过程要比其他的都复杂,主要分为四个阶段:
总结:在初始标记和重新标记阶段都会暂停用户线程,产生STW,但是STW的时间很短。 其他阶段都是并发进行,不产生STW。所以CMS虽然是并发垃圾回收器,但是整体上还是会产生 STW,只是说STW的时间较短。因为最费时的并发标记与清除标记都不需要暂停工作,所以整体 上的低暂停时间的
CMS的缺点:
那为什么不适应标记-压缩算法?
总结:关于内存碎片虽然也可以设置整理算法解决,但是效果不好。垃圾回收过程中,必须暂停用户线程的时间。 而现在CMS要进行并发,那么就导致垃圾回收过程中,用户线程还在制造新的垃圾的现象。 所以CMS后来被移除掉了,就是因为它为了达到低延迟,牺牲了太多东西,也造成了太多的问题。 jdk9.0被移除,但是还可以用。会报错 。jdk14.0就彻底的被清除了。
四.G1垃圾回收器
寄语:坚持也是一种超能力
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/monkey-xuan/p/15902933.html
内容来源于网络,如有侵权,请联系作者删除!