JVM-垃圾回收器

1.Serial:

最基本的垃圾回收器,新生代收集的唯一选择,采用复制算法的收集器,单线程,进行垃圾收集时,

必须暂停其他所有的工作线程。

“Stop The World”

2.ParNew:

是Serial收集器的多线程版本,其行为还包括Serial收集器可用的所有控制参数,收集算法,Stop The World,

对象分配规则,回收策略等,都与Serial一样。只有它能与CMS收集器配合使用

3.Parallel Scavenge:

新生代收集器,采用复制算法的收集器,又是并行的多线程收集器。目的是达到一个可控制的吞入量。

吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间);

提供了两个参数用户精确控制吞吐量:15225057957

1.控制最大垃圾收集停顿时间(MaxGCPauseMillis),2.设置吞吐量大小(GCTimeRatio)

GC停顿时间缩小是以牺牲吞吐量和新生代空间换区的,并不是MaxGCPauseMillis越小越好。

还有一个参数UseAdaptiveSizePolicy值的关注,这是一个开关参数,当打开之后,就不用手动指定参数细

节了,自动调节最合适的停顿时间或者最大的吞吐量,这种调节方式称为:GC自适应调节策略。

GC自适应调节策略也是Parallel Scavenge与ParNew最大的区别。

4.Serial Old:

是Serial收集器的老年代版本,同样是一个单线程的收集器,使用"标记整理"算法。

如果在server端有两大用途:

1.在jdk1.5及之前与Parallel Scavenge搭配使用2.作为CMS收集器的后备预案

5.Parallel Old:

是Parallel Scavenge收集器的老年代版本,使用多线程和"标记-整理"算法。JDK1.6才开始提供.

6.CMS收集器

目的:以获取最短回收停顿时间为目标的收集器。基于“标记清除”算法实现的。

整个过程包括四个步骤:1.初始标记2.并发标记3.重新标记3.并发清除

缺点:

1.占cpu:在并发阶段,占有线程(cpu资源)而导致应用程序变慢,总吞吐量下降。

2.无法处理浮动垃圾,cms并发处理阶段程序还在运行着,还会有新的垃圾生成,只能下次回收。

3.采用“标记清除”会大量空间碎片产生,

7.G1:

面向服务端应用的垃圾回收器。整体上基于“标记-整理”算法.

特点:

  1. 并行和并发

  2. 分代收集

  3. 空间整合

  4. 可预测的停顿

它将整个java堆划分为多个大小相等的独立区域,虽然还保留有新生代和老年代的概念,但

新生代和老年代不再是物理隔离得了,它们都是一部分Region(不需要连续)的集合。

之所以能建立可预测的停顿时间模型,是因为可以有计划的避免在整个java堆中进行全区域的

垃圾回收。G1跟踪各个Region里面的垃圾堆积的价值大小,后台维护一个优先列表,每次

根据允许的收集时间,优先回收价值最大的Region。这种使用Region划分内存空间以及有优先级

的区域回收方式,保证了G1收集器在有限的时间内可以获取尽可能高的收集效率。

整个过程包括四个步骤:1.初始标记2.并发标记3.最终标记4.筛选回收

猜你喜欢

转载自blog.csdn.net/qq_37751454/article/details/80006802