JVM:GC算法和收集器

JVM的垃圾会回收主要发生再堆于方法区。程序计数器,本地方法栈,虚拟机栈等线程私有的内存会随着线程的消失自动清理内存。

垃圾回收算法

标记清除: 对于可回收的对象先标记再清除,效率高;适用于新生代对象更新频繁,从而会留下更多大块的内存区域。
标记整理:先标记,清除再整理,相比标记清楚,多了整理的步骤,所以适用于老生代不会频繁调用回收机制。
复制算法:将内存分为两块区域,轮流替换使用。不适合对象存活周期长的区域,频繁的复制会大大降低回收效率
分代回收算法:根据内存特征选择不同的回收算法

判断对象存活

1,引用计数法:无法解决对象互相循环引用问题
2,可达性分析法:从GCroot开始向下搜索,搜索的路劲就是对象的引用连,而在引用链外面的就表示为不可达对象,即可回收的对象

垃圾回收器

Serial收集器

Serial是比较老的,回收方法比较粗暴的l收集器。采用单线程串行方式回收,新生代使用复制算法,老生到使用标记整理算法,不会产生零碎的内存空间,但是GC在回收时会停止应用系统(stop the world)。

参数控制:-XX:+UseSerialGC 串行收集器

##ParNew收集器是Serial收集器的多线程版本,新生代使用并行的复制算法,老生代使用串行标记整理算法。

-XX:+UseParNewGC ParNew收集器
-XX:ParallelGCThreads 限制线程数量

Parallel收集器

Parlalel收集器和ParNew类似,但是Parallel收集器更关注应用的吞吐量,因此提供可以设定参数控制收集器回收时间,用来保证在垃圾回收时,使系统停顿最短的时间和最大的吞吐量。新生代使用并行的复制算法,老生代使用串行标记整

参数控制:-XX:+UseParallelGC 使用Parallel收集器+ 老年代串行

Parallel Old收集器

这是Parallel收集器比较老的版本,使用并行的标记整理算法
参数控制: -XX:+UseParallelOldGC 使用Parallel收集器+ 老年代并行

CMS收集器

CMS,concurrent mark sweep并发标记清楚,可想而知,该收集器是基于标记清除算法实现的。该收集器重视服务器响应速度,不希望系统出现较长时间的STW(stop the world),在B/S架构和互联网网站广泛应用。

基于标记清除算法,但过程比标记清除算法更为复杂,分为四步:
1,初始标记
2,并发标记
3,重新标记
4,并发清除

在初始标记和重新标记的时候,仍然会STW。但并发标记和并发清除才是整个过程中最消耗时间的。
初始标记时,暂停应用,但只是标记与Root GC直接关联的对象,并发标记则是根据初始标记的结果进行更深的全面标记,这个步骤时与应用并行的。而重新标记,则是标记并发标记阶段应用程序产生的新的对象,这个过程也会STW。最后一个并发清除也会和程序一起并行。

优点:并发收集效率高,低停顿。
缺点:并发期间,系统吞吐量降低。
因为使用标记清除,会产生大量零碎内存空间。需要设定碎片整理,暂停整个应用。

参数控制:
-XX:+UseConcMarkSweepGC 使用CMS收集器
-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长
-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量(一般情况约等于可用CPU数量)

G1收集器

G1收集器是目前最前沿的垃圾回收技术,我觉得G1与CMS极为相似,至少在实现思想上是的,回收步骤大致相同,也是分为初始标记,并发标记,重新标记,并发清除整理

与CMS相比主要有两点优化:
1,空间整合:与CMS基于标记清除不同,G1是基于标记整理算法,不会带来零碎内存空间问题,导致需要分配大块内存而不足重新出发GC。
2,划分堆为Region:其他收集器收集范围都是新生代和老生代,而G1是把整个堆划分为多个大小小相等的区域(Region),但新生代和老生代不再物理隔离,都是一个个独立的Region.
但G1收集器还有一大特点,可预测停顿,就是开发者可以指定一个N毫秒的时间限制,G1则会根据自己预测的时间模型保证垃圾回收时间不超过设定的时间N。

在这里插入图片描述

根据纯洁的微笑JVM系列学习:http://www.ityouknow.com/jvm/2017/08/29/GC-garbage-collection.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值