-
标记-清除
两个阶段,首先对可回收对象进行标记,然后再清除。是最基础的垃圾回收算法,有两个问题:1、效率问题;2.标记清除后会产生大量不连续碎片。
-
复制算法
将内存平分为两块,对象只存放在其中一块,当一块内存使用完后,将还存活的对象移动到另外一块内存中,使用的那一块内容全部清理。这种算法适用于每次收集都有大量对象死去的情况,比如说新生代。
-
标记-整理
首先将要被回收的对象标记,然后将存活下来的对象移到一端,然后清理段边界以外的对象。
-
分代回收算法
当前虚拟机采用的均是这种分类算法,将内存分为新生代老年代,可以根据两者的不同特点使用不同的垃圾分类回收算法。比如说在新生代中,由于每次垃圾收集都会有大量的对象死去,适合采用复制算法,只需要付出少量对象的复制成本便可完成垃圾回收。而老年代的对象存活率比较高,必须选择“标记-清除”或“标记-整理算法进行回收”。
HotSpot 为什么要分为新生代和老年代?
答:将内存分为新生代老年代,可以根据两者的不同特点使用不同的垃圾分类回收算法。比如说在新生代中,由于每次垃圾收集都会有大量的对象死去,适合采用复制算法,只需要付出少量对象的复制成本便可完成垃圾回收。而老年代的对象存活率比较高,必须选择“标记-清除”或“标记-整理算法进行回收”。