JVM各个垃圾收集器区别

xiaoxiao2021-02-28  42

默认收集器

jdk1.7Parallel Scavenge(新生代)+Parallel Old(老年代)jdk1.8Parallel Scavenge(新生代)+Parallel Old(老年代)jdk1.9G1

虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,检测的根据是至少2个CPU和最低2GB内存。

所有垃圾回收器的特点

Serial

1、新生代收集器,可以和Serial Old、CMS组合使用

2、采用复制算法

3、使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

4、Client模式新生代收集器

ParNew

1、新生代收集器,可以和Serial Old、CMS组合使用

2、采用复制算法

3、使用多线程进行垃圾回收,回收时会导致Stop The World,其它策略和Serial一样

4、许多虚拟机Server模式的新生代收集器

Parallel Scavenge

1、新生代收集器,可以和Serial Old、Parallel组合使用,不能和CMS组合使用

2、采用复制算法

3、使用多线程进行垃圾回收,回收时会导致Stop The World

4、关注吞吐量

Serial Old

1、年老代收集器,可以和所有的年轻代收集器组合使用,Serial收集器的年老代版本

2、标记-整理算法,会对垃圾回收导致的内存碎片进行整理

3、使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

Parallel Old

1、年老代收集器,只能和Parallel Scavenge组合使用,Parallel Scavenge收集器的年老代版本,Stop The World

2、多线程,采用标记-整理算法,会对垃圾回收导致的内存碎片进行整理

3、关注吞吐量的系统可以将Parallel Scavenge+Parallel Old组合使用

CMS

1、年老代收集器,可以和Serial、ParNew组合使用

2、采用标记-清除算法,可以通过设置参数在垃圾回收时进行内存碎片的整理

3、CMS是并发算法,表示垃圾回收和用户进行同时进行,但是不是所有阶段都同时进行,在初始标记、重新标记阶段还是需要Stop the World。

4、CMS垃圾回收分这四个阶段,三次标记一次回收: ① 初始标记,标记一下GC Roots能直接关联到的对象,速度快 ② 并发标记,GC Roots Tracing,时间长,不停止用户进程 ③ 重新标记,Stop the World,修正并发标记期间因用户程序继续运行导致标记变动的那一部分对象的标记记录,时间长,但远比并发标记时间短

④ 并发清除,清除的同时用户进程会导致新的垃圾,时间长

5、适合于对响应时间要求高的系统,以最短回收停顿时间为目标

缺点:

① 对CPU资源非常敏感,并发且维护用户进程的代价

② 无法处理浮动垃圾,清除时产生新垃圾

③ 由于使用标记清除,故有空间碎片

G1、并行并发,使用多个CPU缩短STW的时间2、分代收集,不需要其他收集器配合也能独立管理堆3、空间整合,整体基于标记整理算法,局部两个Region基于复制4、可预测停顿,可以指定时间段M内GC过程时间不超过N5、较低停顿,停顿时间更加可控可预测

特殊点:

① 新生代和老年代不再物理隔离,都属于一部分Region的集合,将堆分为大小相等的Region。

② G1跟踪各个Region垃圾的价值大小以及回收需要时间维护一个Region优先列表,每次先回收价值最大的Region,这是G1-Garbage First名字的由来

③ G1运作分四个阶段,三次标记一次回收

     初始标记,并发标记,最终标记,筛选回收

分类

根据线程分类多线程单线程ParNew、Parallel Scavenge、Parallel Old、CMS、G1Serial、Serial Old根据年代分类新生代老年代

Serial、ParNew、

Parallel Scavenge

Serial Old、Parallel Old、CMSG1根据算法分类复制标记清除标记整理Serial、ParNew、Parallel ScavengeCMSSerial Old、G1、Parallel Old
转载请注明原文地址: https://www.6miu.com/read-2619669.html

最新回复(0)