Java虚拟机那些事儿(六):HotSpot垃圾收集器参数和组合方式

HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,也会适用于不同的分代。不同的分代之间也有对应的关联参数。

垃圾回收器的回顾

垃圾回收算法
  • 复制算法
  • 标记-清理算法
  • 标记-整理算法
垃圾回收器
  • Serial
  • Serial Old
  • ParNew
  • CMS
  • Parallel Scavenge
  • Parallel Old
理解

垃圾回收算法只有三个,但是垃圾回收器有很多。其实垃圾回收器就是对这些算法的包装,然后根据不同的思想进行一定的组合。对单线程和线程进行适配,提高GC的效率,提高用户的体验,以及提高JVM的运行性能等。(一开始总是把垃圾回收算法和垃圾回收器弄混,在这mark一下)

垃圾回收器的组合

垃圾回收器对应的有老年代的和年轻代的,但是他们应该怎么组合才能是效率更高,又或者说那些回收器可以组合到一起,哪些不可以。先看图。

在这里插入图片描述

从图中可以看的出来每一种垃圾回收器都不是万金油(除Serial Old外),不可能适配对应区域(老年代或年轻待)的所有垃圾回收器。

  • Serial是单线程,并且会stop the world的,他对应到老年代,也就只能是CMS和Serial Old;
  • ParNew在GC的时候也会stop the world,但是在Serial上做了优化,可以支持多线程,这个时候就大大的减少了stop the world的时间,可以对应到老年代的CMS和Serial Old收集器;
  • Parallel Scavenge更为关注的不是stop the world时间,而是关注程序的吞吐量,这种收集器也被称为“吞吐量优先”收集器,采用的也是多线程,一般用于后端的数据运算且不需要太多交互的任务。对应到老年代分别是Parallel Old和Serial Old。
  • 上面的图你可能也注意到了CMS和Serial Old也有连线,因为CMS收集器过程经历了四个阶段分别是初始标记、并发标记、重新标记和并发清除。在经历这四个阶段的时候,如果新的垃圾出现在标记之后,就会无法被清理,会导致浮动垃圾的堆积,只能等待下一次GC过程清理。在CMS的收集过程会预留一部分空间给用户线程运行,这个时候如果出现预留空间不够用,CMS收集就会出现“Concurrent Mode Failure”。为了保证GC,虚拟机预留的后备方案就是启动Serial Old收集器。所以这里CMS和Serial Old是连到一起的。

参数

参数表如下:

在这里插入图片描述

参数表说明的很详细,就不细说啦。可以背一背装逼用。(公司里面有人会点虚拟机,没事就在我们面前装逼,这个逼我一定要装回去😏)

reference

深入理解JVM虚拟机 周志明 著

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值