为什么标记-整理算法适用于对象存活率高的场景?

来源:7-2 Java垃圾回收之回收算法

_jajajaja_0

2020-03-24

翔仔老师好,我这里不是很明白,对象存活率高不是意味着每次要移动整理的对象也越多吗,这样效率不是比较低吗?

为什么不是适用于对象存活率低的场景,这样只需要移动少量存活对象,再清除剩余区域就能实现垃圾回收?

写回答

1回答

翔仔

2020-03-25

同学好,实际执行的过程中,标记整理中是标记的要清理的对象,对象存活率高意味着需要清理的对象少而不是多


0
4
翔仔
回复
_jajajaja_0
不好意思,最近在赶课赶到深夜容易短路,我以为同学问的是标记,整理这块的话,首先,是为了防止碎片化,比如说你标记要删除的对象,删除之后,如果不进行整理,不移动存活对象,久而久之就会出现碎片,这个是其一。整理的时候,不需要像复制算法那样去申请两块空间,保存一份副本,再清除另外一个,因为存活的对象如果相对很多的话,你再申请另外一块内存空间出来就容易OOM了。同学可能会说,那为什么不直接将现有的内存空间分成两块?分成两块的话就导致你的内存占用空间比太大,比如说原本存储存活的对象需要1G,结果你现在需要的是2G。 另外一个,针对存活率低的场景,就意味着对象需要经常移动,如果每次都进行整理的话,性能势必低,还不如把少量的存活对象复制到另外一个区域,然后删除原有的固定区域,这样性能更佳
2020-03-26
共4条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程