JVM入门之历代垃圾回收器 1

电子说

1.3w人已加入

描述

分类

一,采用分代理念的垃圾回收器:

1.年轻代:Serial PartNew Parallel Scavenge

2.老年代:

CMS Serial Old(MSC) Parallel Old

二,不采用分代理念的垃圾回收器:

G1 ZGC Shenandoah

可搭配使用的各个收集器之间关系图:

JVM

并行和并发

很多人经常把这两个搞混,当然笔者刚开始的时候也是傻傻分不清楚。其实只要记住并行说的是GC 线程之间的关系,而并发说的是GC和用户线程之间的关系。

并行:同一时间有多条这样的线程在协同工作,但是此时用户线程是等待状态

并发:同一时间GC和用户线程可以一起工作一起运行。因此程序依然能够响应用户线程的操作但是由于GC线程也占用了一部分系统资源,所以此时的用户线程处理的效率会下降

年轻代垃圾回收器

Serial收集器

JVM

Serial收集器

特点

垃圾回收时需要STW,整个STW需要停止掉所有的用户线程来保证回收过程中引用关系不会发生变化。

但是并不是说垃圾回收的时候只会启用一个回收线程,更准确的描述应该是 「同一时间只允许一个垃圾回收线程工作」 ,也就是 「不支持并行工作」 ,多个GC线程之间串行工作。

优点

1.对于内存资源受限的机器来说比较友好:

由于回收时停止掉了所有的用户线程,因此他不必维护那些: 「用户线程和GC线程同时运行的时候在回收过程中为了保证引用关系发生变化的额外内存开销」 ;比如上一篇文章说到的原始快照和增量更新。

2.而且由于GC线程不是并行的,所以没有线程之间的交互;对于处理器内核少(线程少)的机器来说,

第一点也就是线程串行执行一个线程完了之后才能执行下一个线程,而对于并行的来说其实本质上还是串行只不过各个线程间可以自由来回切换,所以需要对切换前后的资源进行额外的保存等等因此并发涉及到的这部分线程交互开销对于该款串行执行的GC线程时没有的

图示:

JVM

串行和并行

缺点

但是缺点也很明显:回收过程中停止掉所有用户线程,对用户肯定是不能容忍的

PartNew收集器

JVM

PartNew收集器

特点:

该款垃圾收集器和刚才讲的第一个Serial收集器其实最大的不同就是GC Thread可以并行的区别。注意是 「并行」 ,之后讲解的 「CMS」 才是可以实现GC Thread 「并发」 的收集器。

Parallel Scavenge收集器

特点

该款垃圾收集器同样和PartNew收集器一样,并行GC线程。只不过该款收集器重点是倾向于 「吞吐量」

JVM

老年代垃圾回收器

Serial Old收集器

JVM

Serial Old收集器

区别于Serial回收器只是回收算法的不同

Parallel Old收集器

Parallel Scavenge收集器的老年代版本,支持多线程 「并发」 收集。

组合

「吞吐量优先垃圾回收器组合」

新生代采用Parallel Scavenge收集器,老年代采用Parallel Old收集器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分