JVM之内存回收策略(二)

JVM之内存回收策略(二)

1.概述
前面回答了内存应该回收哪些对象。还有两个问题没有解决,内存怎么回收?内存何时回收?

2.标记-清除算法
标记-清除算法是最基础的垃圾回收方法。它的基本思想是:把垃圾都标记出来,然后统一回收。
优点:实现简单。
缺点:在空间上面,标记-清除之后的内存是碎片化的,对于给大对象分配内存时内存不足,提前进行一次垃圾回收。在时间上,标记和清除的效率都很低。

3.复制算法
复制算法就是解决效率问题的方法。它把空闲内存容量划分为两块相等的空间,每次只使用其中的一块。当使用的这一块用完了,就将还存活的对象复制到另一块上面,然后再把已用的内存一次清理掉。这样每次只对一半的内存清理,也不会出现碎片化现象。
优点:实现简单(只需移动指针即可)
缺点:将内存缩小为原来的一半,代价大。

4.标记-整理算法
标记-整理算法思想跟标记-清除算法的标记过程一样,只不过在标记之后让存活的对象向内存空间的一端移动。最后只需要清除存活对象边界以外的内存。

5.分代收集算法
根据对象存活周期,把内存划分为几块。一般是把堆内存划分为新生代和老年代。新生代的对象存活率低就使用复制算法,老年代对象存活率高,就是用标记-清除算法或者标记-整理算法。

6.垃圾收集器
Serial收集器、Serial Old收集器:单线程收集器,在执行垃圾回收的时候暂停所有的用户线程,Seral Old收集器是Serial收集器的老年代版本。新生代采用复制算法,老年代采用标记整理算法。
ParNew收集器:Serial收集器的多线程版本。
Parallel Scavenge收集器:新生代收集器,使用复制算法,跟ParNew收集器一样是多线程。关注点在于提高用户线程在CPU运行的时间比值。
CMS收集器:一种以获取最短回收停顿时间为目标的收集器。并发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值