JVM_垃圾回收器

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

JVM_垃圾收集器

垃圾收集器一共有7种,如果说收集算法是内存回收的方法,那个垃圾收集器就是垃圾回收的具体实现。
在这里插入图片描述
以中间绿线为界,上边三个用于年轻代,下边三个用在年老代,而G1则老少通吃,**黑线**线表示两个回收器可搭配使用,**红线**则表示两者可以在同一区域交替使用。由于G1在JDK1.7才达到商用级别,而且目前线上环境也很少使用。

名称 区域 算法 适用情况
Serial 串行 年轻代 复制 单CPU(或CPU较少)、小型客户端应用
Parallel Scavenge 并行 年轻代 复制 多CPU、吞吐量优先(后台处理、科学计算)
ParNew 并行 年轻代 复制 多CPU、响应优先(web服务器等)
CMS 并发 年老代 标记-清除 响应优先(web服务器等)
Serial Old 串行 年老代 标记-整理 单CPU、小型客户端应用
Parallel Old 并行 年老代 标记-整理 多CPU、吞吐量优先(后台处理、科学计算)

1.Serial收集器

从名字就能看出是串行的意思,该回收器是最早实现的,基于单线程

优点:

实现简单且效率高,

缺点:

进行垃圾回收是会造成“Stop-the-World”(STW),当回收内存区域较大时,就会造成程序响应时间变长。  

STW:在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。

2.ParNew收集器

全名Parallel New Generation,也就是并行新生代垃圾收集器,该回收器实现与Serial基本上一样,只是采用多线程执行回收。是运行在服务端模式下首选的新生代收集器。

3.Parallel Scavenge收集器

Parallel Scavenge则侧重于吞吐量的控制,又名"吞吐量优先"回收器

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

停顿时间:适合需要与用户交互的程序,良好的响应速度能提升用户体验

高吞吐量:高效率的利用CPU时间,尽快完成程序的运算任务,适合在后台运算而不需要太多的交互任务。

自适应调节策略:虚拟机会根据当前系统的运行监控信息,动态调整参数以提供最合适的停顿时间或者最大吞吐量。

该回收器与ParNew的最大区别在于ParNew通常与CMS搭配。

4.CMS收集器

Concurrent Mark Sweep,是一个并发回收器,旨在减少垃圾回收的停顿时间。集中应用于B/S系统的服务端,尤其注重服务的响应速度

CMS运作操作流程

(1)初始标记:标记GCRoots能直接关联到的对象

(2)并发标记:GCRoot开始对堆中对象进行可达性分析

(3)重新标记:修正在并发标记期间因用户程序继续运作而导致标记产生变动的那部分标记记录

(4)并发清除:回收标记的垃圾

CMS缺点:

(1)对CPU资源非常敏感

(2)无法处理浮动垃圾:CMS在并发清除阶段用户线程还在运行,会产生新的垃圾。这部分垃圾出现在标记之后,要等待下次GC才能清理掉

(3)基于标记-清除算法,会产生大量的内存碎片。

5.Serial Old收集器

标记-整理算法实现的,相当于Serial的年老代版。

(1)可以与Parallel Scavenge收集器搭配使用

(2)作为CMS收集器的后备预案

6.Paraller Old收集器

标记-整理算法实现,相当于Parallel Scavenge的年老代版。

在注重吞吐量以及CPU资源敏感的场合:Parallel Old + Parallel Scavengr

7.G1收集器

G1是一款面向服务端应用的垃圾收集器。具备以下特点:

(1)并行与并发

    并行即使用多个CPU来缩端STW停顿的时间,还可以通过并发方式让java程序继续执行。

(2)分代收集

     可以不需要其他收集器配合就能独立管理整个GC堆

(3)空间整合

     标记整理算法实现,在运行期间不会产生内存空间碎片,收集后可以提供规整的可用内存。

(4)可预测停顿

     除了追求低停顿外,还能建立可预测的停顿时间模型。能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上时间不超过N秒。
G1收集器运作流程:

(1)初始标记:标记GCRoots能直接关联到的对象

(2)并发标记:GCRoot开始对堆中对象进行可达性分析

(3)最终标记:修正在并发标记期间因用户程序继续运作而导致标记产生变动的那部分标记记录

(4)筛选回收:回收标记的垃圾

猜你喜欢

转载自blog.csdn.net/qq_17556191/article/details/94989314