垃圾收集器

serial收集器

serial收集器是历史最悠久的。

serial收集器是单线程,当开始工作的时候,暂停所有正在执行的程序,然后执行垃圾收集。这点是很难接受的。但是在客户端使用的时候,它的有点是简单高效的。

parnew收集器

    parnew收集器就是serial收集器的多线程版本,并没有多少创新之处。是需要运行在服务器模式下的首选。有一个与性能无关,但是很重要的原因,就是除了serial收集器,目前只有parnew收集器能和cms收集器一起配合工作。

parallel scavenge收集器

     parallel scavenge收集器类似parnew收集器,但是他的关注点是可控制的吞吐量,可以通过最大垃圾收集停顿时间-xx:maxgcpausemillis以及直接设置吞吐量的大小-xx:gctimeratio。最大垃圾停顿时间不是越小越好,这里需要根据实际情况来设置。还有一个参数值得注意。-xx:+useadaptivesizepolice这是一个开关参数,这个参数打开后,不需要手动指定新生代的大小(-xmn),eden与survivor的比例,晋升老年代大小等细节参数。剩下的交给虚拟机完成就行了。自适应调节策略也是parallel scavenge收集器与parnew收集器的一个重要区别。

serial old收集器

serial old收集器时serial收集器的老年代版本,采用的是标记整理的算法。也是给客户机使用的。

parallel old收集器

parallel old收集器是parallel scavenge收集器的老年代版本。使用多线程和标记整理算法。

cms收集器

    cms收集器解决的问题是:获取最短回收停顿时间为目标的收集器。cms收集器是基于标记清除算法实现的。分为四步实现

步骤一:初始标记:需要停止执行程序。仅仅是标记一下能够GC roots关联到的对象。

步骤二:并发标记:不需要停止执行程序。修正并发执行的时候,导致标记产生变动的那一部分对象。这部分是与用户进程同时进行的,

步骤三:重新标记:需要停止执行程序。

步骤四:并发清除:不需要停止执行程序。这部分是与用户进程同时进行的。

优点是并发收集,低停顿。

缺点是:1.对CPU资源很敏感。2.无法处理浮动垃圾。3.cms是基于标记清除算法的收集器,这样会产生大量的碎片,导致大对象无法放进来。

G1收集器

G1收集器的使命是在未来替换掉cms。

G1收集器的特点:1.并行与并发;2.分代收集;3.空间整合;4.可预测的停顿。

    G1收集器之所以建立了可预测的停顿时间,是由于它将java堆划分为好多不同的区域,根据每个区域回收价值的大小,优先回收价值大的区域。但是这里面的实现细节非常复杂。

运行步骤

步骤一:初始标记

步骤二:并发标记

步骤三:最终标记

步骤四:筛选回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值