标记 - 整理算法

标记 - 整理算法


复制算法为什么不适合老年代

在这里插入图片描述

复制收集算法在对象存活率较高时需要进行较多的复制操作效率将会降低。更关键的是,如果不想浪费50%的内存空间,就需要提供额外的空间进行分配担保。由于老年代中对象存活率较高,而且找不到其他内存进行分配担保,所以老年代一般不能直接选用这种收集算法。

分配担保

一般情况下,复制算法将内存空间按照容量划分为两块(如上图所示),两块内存交替使用,当一块内存使用完的时候,就先将存活的对象逐一复制到另一块未使用的内存,然后将当前使用的这块内存一次性清理掉。极端情况下,对象全部存活,但是因为两块内存一样大,所以可以装得下。

为了提高内存利用率,有人提出了复制收集算法的改进方案(如下图所示),将内存空间按照8:1:1的比例划分为3块(比例可以调整),称较大的一块为Edent,较小的两块为Survivor,两个Survivor交替着配合Eden一起使用,每当需要进行垃圾回收,先将存活的对象复制到保留的Survivor,然后将Eden和之前使用的Survivor一起清理掉。由于Survivor的内存空间较小,极端情况下可能不够保存存活下来的对象,为了解决这个问题,需要提供一块额外的空间进行分配担保——把保存不下的对象存储到额外空间。

在这里插入图片描述


标记 - 整理算法(Mark - Compact)

根据老年代的特点,有人对“标记 - 清除”进行改进,提出了“标记 - 整理”算法。“标记 - 整理”算法的标记过程与“标记 - 清除”算法相同,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值