0
点赞
收藏
分享

微信扫一扫

每天一个知识点(6)--JVM-垃圾回收算法

Sky飞羽 2021-09-30 阅读 63

JVM进行垃圾回收需要确定哪些是垃圾对象,有两种确认方法:

  • 引用计数法:如果一个对象被引用,则引用计数+1,反之-1,那么引用计数为0的则为垃圾对象,但是这种方式无法解决循环引用问题。
  • 根可达算法:通过一系列成为GC Roots的对象作为起点,向下搜索。当一个对象到任何GC Roots都没有引用链相连,说明其已经死亡。

JVM的垃圾回收算法包含以下几种:

  • 复制算法:该算法主要作用在堆中的年轻代,具体过程为将不是垃圾对象从eden区+survior from区复制到survior to区,所有存活对象年龄+1,然后再循环下一次复制。该算法的特点是效率高,适合处理大量对象成为垃圾的场景,因为年轻代的对象都是朝生夕死,但是缺点就是有内存的浪费。
  • 标记清除算法:最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。该算法的缺点是产生内存碎片。
  • 标记整理算法:前一个阶段和标记清除很相似,都是标记需要回收的对象,标记后不是清理对象,而是将存活对象移向内存的一端。然后清除端边界外的对象。该方法相对标记清除不会产生内存碎片,但是相对来说效率会低一些。
举报

相关推荐

0 条评论