常用垃圾回收器记录

垃圾回收算法

垃圾回收器使用可达性算法标记需要回收的垃圾,可达性算法以root对象为起点,标记所有能够走到的对象,剩余不可达的对象即为垃圾回收的目标。root对象包括类静态属性的对象,本地方法栈的对象,虚拟机栈的对象(相当于当前正在执行的方法中用到的对象),常量的对象。标记根节点的过程无法和用户线程并行,即需要stop the world。任何回收器,初始标记阶段和重新标记阶段都需要stw。

标记清除算法:简单,容易产生空间碎片
标记复制算法:年轻代常用,不产生空间碎片,但是反复的复制对象资源消耗比较大2,因为年轻代大部分对象都是使用后就销毁,所以比较适合
标记整理算法:垃圾回收时,移动存活对象当一片连续的空间。老年代常用,避免产生碎片,同时也比较高效

垃圾回收器性能指标

吞吐量:程序运行时间占总运行时间(总运行时间=程序运行时间+垃圾回收时间)的比例,垃圾回收时间越少,吞吐量越高;
暂停时间:STW的时间;
内存占用:Java堆所占的大小。

serial

年轻代处理器,单线程,使用复制算法,垃圾回收过程中需要暂定用户线程。

serial old

老年代处理器,单线程,使用标记整理算法。(ps marksweep 和serial old 基本使用同一套逻辑,通常认为是同一个回收器)

parNew

年轻代回收器,复制算法,serial回收器的并行并行版本。适合在多核cpu上使用。

Parallel Scavenge 

吞吐量优先垃圾回收器,年轻代回收器,复制算法。相比与parNew,实现了可预测的垃圾回收时间,可以通过参数设置每次垃圾回收的时长,但是设置的太小会导致垃圾回收不充分产生堆积,最终导致full gc。后来的g1也有类型的功能。劣势在于没法和老年代的CMS配合,一定程度上限制了发挥。jdk1.8的默认回收器组合是Parallel Scavenge  + ps marksweep(serial old)

Parallel Old

Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法进行垃圾回收,也是更加关注系统的吞吐量。

CMS

老年代并发回收器,停顿时间优先。使用标记清除算法,容易产生空间碎片。对cpu资源敏感。CMS发生异常时,serial old会作为备用方案

G1

全能回收器,保留了老年代和年轻代的说法,但是不再简单划分老年代和年轻代,它将区域分成连续的小块(Region),每一块都可以作为老年代或者年轻代使用。

垃圾回收期组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值