JAVA虚拟机【GC机制】垃圾收集器

首先就给出一张图,图中展示了7中作用域不同分代的收集器,若两个收集器之间有连线,就说明它们可以搭配使用。

1.Serial收集器

Serial在收集垃圾的时候,必须暂停其他所有的工作线程,直到它收集结束(Stop The World)

到目前为止,它依然是虚拟机运行在Client模式下额默认新生代收集器。因为Client模型下需要收集的很少,停顿时间也很短,可以被接受。

2.ParNew收集器

除了使用多线程进行垃圾收集之外,鳍鱼的行为包括Serial收集器控制参数,收集算法等都一样。

3.Parallel Scavenge收集器

该算法的目标是达到一个可控制的吞吐量,吞吐量=运行用户代码时间 /(运行用户代码时间+垃圾收集时间)。自适应的调解室它与ParNew最大的区别。

4.Serial Old收集器

Serial收集器的老年代版

5.Parallel Old 收集器

Parallel Scavenge的老年代版

6.CMS收集器

CMS包括 初始标记,并发标记,重新标记,并发清除四个阶段。初始标记和重新标记这两个步骤仍然需要“Stop The World”。初始标记是找GC Roots,速度很快,并发标记进行GC Roots Tracing,重新标记是修正并发标记旗舰用户程序继续运作导致标记产生变动的那部分对象的标记记录。这个阶段时间比初始标记长,但是远小于并发标记。整个过程并发标记和并发清除都是和用户程序并发的。


CMS的缺点:

  • 对CPU资源非常敏感。并发过程中与用户程序共占资源,导致程序变慢。
  • 有浮动垃圾,即并发清除时产生的垃圾,解决方案是当老年代到了一定比例就开始收集
  • 因为用的“标记-清除”,所以有内存碎片。

7.G1收集器

特色如下:

  • 并行与并发
  • 分代收集
  • 空间整合
  • 可预测的停顿

主要包括初始标记,并发标记,最终标记,筛选回收。第1,3阶段仍然需要中断线程。筛选回收需要对各个region的回收代价和成本估计排序,根据用户所期望的GC时间制定回收计划。

发布了73 篇原创文章 · 获赞 11 · 访问量 9494

猜你喜欢

转载自blog.csdn.net/fanyuwgy/article/details/103499790