【深入理解jvm阅读笔记】经典垃圾收集器

针对新生代(Minor GC)

Serial收集器:特点是单线程,"Stop the World",面向客户端

ParNew收集器:Serial的多线程版本

Parallel Scavenge收集器:基于标记-复制算法,多线程。和ParNew的区别是,它重在强调吞吐量

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

                                             提供两个参数用于设置吞吐量大小: -XX:MaxGCPauseMillis,收集器将尽力保证内存回收时间不超过这个值。它越小,吞吐量也越小。

                                                                                                     -XX:GCTimeRatio,直接设置吞吐量的大小。表示希望程序执行时间是GC的多少倍,默认99.

针对老年代(Major GC)

Serial Old收集器:Serial收集器的老年代版本,单线程,使用标记-整理算法

Parallel Old收集器:Parallel Scavenge的老年代版本,多线程并行收集,使用标记-整理算法

CMS收集器: 全称Concurrent Mark Sweep可以看出使用的是标记-清除算法,主要分为4个步骤

                        ①初始标记:只标记GC Roots能直接关联到的对象(可以理解为离GC Roots最近的子节点

                        ②并发标记:从GC Roots能直接关联到的对象开始遍历整个图

                        ③重新标记:为了修正因并发标记期间程序继续运作而导致标记变动的那一部分对象的标记记录

                        ④并发清除:清除掉标记阶段判断的已经死亡的对象

                        总结:①③是Stop the World的,②④是并发的。正因为有②,所以才会有③

                        缺点:并发阶段占用部分线程导致应用程序变慢,降低总吞吐量。CMS默认的回收线程数量(coreNum+3)/4;并发阶段会出现浮动垃圾;标记-清除产生碎片

G1收集器(Mixed GC)

服务端模式下的默认垃圾收集器,取代了CMS。之所以和前两个标题并列,是因为G1收集器并不是只针对新生代或者老年代的,相反,它的衡量标准是哪块内存中的垃圾多、回收收益大,就先回收哪。印证了他的名字 Garbage First

G1将堆内存看成一个个Region,根据实际需要,每个Region都可以扮演新生代或者老年代。同时,垃圾回收的单位也是Region。G1维护了一个优先队列,优先级的依据是每块Region被回收所获得的空间大小和所需的时间(也就是基于时空两个标准来衡量)。每次根据用户设定的允许收集停顿时间(上文提到的-XX:MaxGCPauseMillis)来按照优先级依次处理Region

G1从整体上看使用的是标记-整理算法,但从局部(两个Region之间)来看使用的又是标记-复制算法。

注:

并行描述的是多条垃圾收集器线程之间的关系,并发描述的是垃圾收集器线程和用户线程的关系

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值