面试题28:GC算法——标记压缩&分代算法

2023-05-09 21:38:51 浏览数 (1)

【标记压缩算法】

标记压缩算法如下图所示:

  • 由于老年代的对象存活率很高,不容易被消亡,而复制算法不仅存在空间浪费,而且当老年代对象很多的时候,复制对象的效率会非常的低,所以,基于老年代的特性产生了标记压缩算法。
  • 它在标记清除算法的基础上做了优化,和标记清除算法一样,也是首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不是简单地清理未标记的对象,而是将所有的存活对象压缩到内存的一端,然后,清理边界外所有的空间。这种方法即避免了碎片的产生,又不需要两块相同的内存空间,因此,性价比很高。

【分代算法】

分代算法如下图所示:

  • 当前jvm的垃圾回收,都是采用分代收集算法
  • 针对新生代由于GC都有大量对象死去被回收,少数存量对象,只需要复制少量对象,就可以完全清除S0/S1的垃圾对象空间。所以采用“复制算法”更为合适;
  • 老年代对象存活率高,每次GC只清除少部分对象,所以采用“标记-清除”“标记-压缩”算法来回收。

0 人点赞