JVM垃圾回收算法

    基本的垃圾收集算法思想一共四种,标记清理、复制算法、标记整理,分代收集,其余的基本上都是基于这四种算法的改进。

    标记-清理(Mark-Sweep):该算法在jvm中的应用是对Old区域的回收,由于Old的对象已经是长时间存活的对象,因此标记清理是标记适合该区域的算法,但也会面临一个问题,长时间的运行以后产生的空间碎片应该如何处理,如不及时处理则会触发fullGC导致长时间停顿,这也是该算法的缺点。

    标记-整理(Mark-Arrange):该算法在jvm中的应用也是对Old区域的回收,该算法解决了标记清理的空间碎片化。但也损失了效率,因此在对Old区域回收的过程中,这两者应该结合使用,并选取一个合适的触发比例,这样既能保证不会有太多空间碎片,也不会损失太多效率。

    复制算法(Copying):该算法在jvm中的应用是对Surviver区域的回收,正因为如此才会有两块Surviver区域,对效率基本上有了最大化的保证, ,该区域存放对象的特点是存活周期适中,故而较为适合。对Eden的回收也是采用这种算法,由于其中绝大部分对象存活周期极短,故而最适合复制算法,将每次躲过回收的对象直接复制到Surviver区域。这样对于新生代整块区域的空间利用率达到了90%,这样的设计极端巧妙的避免复制算法的弊端。

    分代收集(Generational Collection):准确的说这是一种垃圾回收的思想,依据对象的存活周期分为新生代、老年代。并对每一代具体划分,对不同的区域根据其特性采用不同的回收算法。

 

 

你可能感兴趣的:(JVM)