JVM垃圾回收算法

1.标记-清除算法:
分为“标记”和“清除”两个阶段,先利用可达性分析算法,标记出存活的对象。标记完之后,再扫描整个空间中未被标记的对象进行回收。
缺点:效率低,会造成大量碎片。(清除后会产生大量的不连续的内存碎片)

2.标记-整理算法:
在标记-清除算法的基础上,标记出所有需要回收的对象,但是不会直接清理,而是将存活的对象向一端移动,在移动过程中清理掉可回收对象,并更新对应的指针。

优点:解决了之前内存碎片的问题
适用于对象存活率高的,比如老年代。

3.复制算法:
将内存容量分成大小相等的两块,每次只使用其中一块,当一块用完时,将还存活的对象复制到另一块去,将已使用的块清除,如此反复。
优点:不会产生内存碎片
缺点:内存空间浪费大,每次只能使用当前 能够使用 内存空间的一半;当对象存活率较高时,需要有大量的复制操作,效率低。

适用于年轻代,因为年轻代多为生命周期较短的对象。年轻代将内存分为一个Eden, 两个Suvivor, 一个Survivor0,一个Survivor1。首先使用Eden, 当Eden内存占满时将存活对象复制到Survivor0,同时清空Eden。当Suvivor0内存也满时,就复制Eden和Suvivor0的存活对象到suvivor1,然后清空Eden和Suvivor0。然后互换Suvivor0和Suvivor1的角色,保持Suvivor1为空。当Suvivor1放不下Suvivor0和Eden的存活对象时,则需要老年代的空间担保。

在这里插入图片描述
4.分代收集算法:
根据内存对象的存活周期不同,JVM将内存划分成新生代和老年代,当新建对象时,一般在新生代中分配内存,在新生代垃圾收集器回收几次后仍然存活的对象,将被移动到老年代,
或者当大的对象在新生代中无法分配到足够连续的内存空间时也会直接分配到老年代。
根据新生代,老年代的特点采用不同的算法。
新生代对象的存活周期较短,所以采用复制算法。
老年代对象存活周期较长,所以采用标记-整理算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值