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


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

1. 垃圾回收器的回顾

1.1 垃圾回收算法

  • 复制算法
  • 标记-清理算法
  • 标记-整理算法

1.2 垃圾回收器

  • Serial
  • Serial Old
  • ParNew
  • CMS
  • Parallel Scavenge
  • Parallel Old

1.3 理解

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

2. 垃圾回收器的组合

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

从图中可以看的出来每一种垃圾回收器都不是万金油(除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是连到一起的。

3. 参数

参数表如下:

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


文章作者: 杨立滨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杨立滨 !
评论
 上一篇
http基础知识点了解一下 http基础知识点了解一下
在 OSI 七层模型中,HTTP协议位于最顶层的应用层中。通过浏览器访问网页就直接使用了 HTTP 协议。使用 HTTP 协议时,客户端首先与服务端的 80 端口建立一个 TCP 连接,然后在这个连接的基础上进行请求和应答,以及数据的交换。HTTP 有两个常用版本,分别是 1.0 和 1.1。主要区别在于 HTTP 1.0 中……
2018-08-13
下一篇 
Java虚拟机那些事儿(五):HotSpot垃圾收集器 Java虚拟机那些事儿(五):HotSpot垃圾收集器
G1是一款面向服务端应用的垃圾收集器,它没有新生代和老年代的概念,而是将堆划分为一块块独立的Region。当要进行垃圾收集时,首先估计每个Region 中垃圾的数量,每次都从垃圾回收价值最大的Region开始回收,因此可以获得最大的回收效率。从整体上看,G1是基于“标记-整理”算法实现的收集器,从局部(两个Region之间)上看到……
2018-08-10
  目录