本文介绍: 标记-清除算法将垃圾回收分为两个阶段,标记阶段和清除阶段在标记阶段首先通过GC Roots,标记所有从根节点开始的对象,未被标记的对象就是未引用的垃圾对象。然后,在清除阶段,清除未被标记的对象。1、存活对象较多的情况下比较高效2、使用于老年代1、容易产生内存碎片,再来一个较大对象时。会提前触发消息回收(即,对象的大小大于空闲中的每一块大小,但是小于其中两块的和)2、扫描了整个空间两次。第一次:标记存活对象,第二次:清除没有标记的对象。
4种JVM垃圾回收算法
标记清除算法
标记-清除算法将垃圾回收分为两个阶段,标记阶段和清除阶段
在标记阶段首先通过GC Roots,标记所有从根节点开始的对象,未被标记的对象就是未引用的垃圾对象。然后,在清除阶段,清除未被标记的对象。
适合场景:
1、存活对象较多的情况下比较高效
2、使用于老年代
缺点:
1、容易产生内存碎片,再来一个较大对象时。会提前触发消息回收(即,对象的大小大于空闲中的每一块大小,但是小于其中两块的和)
2、扫描了整个空间两次。第一次:标记存活对象,第二次:清除没有标记的对象
复制算法
从根节点进行扫描,标记出所有存活的对象,并将这些存活对象复制到一块新的内存,之后将原来那块的内存全部回收掉
现在的商用虚拟机都采用这种收集算法来回收新生代。
适用场景:
1、存活对象较少的情况下比较高效
2、扫描了整个空间一次(标记存活对象并且复制移动)
3、适用于年轻代,基本99%的对象都是朝生夕死,存活下来的很少
标记整理算法
分代回收算法
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。