2016 May 23 Java
Java 垃圾回收机制相关算法
引用计数算法:一个对象被引用计数器加1,取消引用则计数器减1,计数器为0时,则回收该对象。
- 优点:简单,不会打断程序的运行
- 缺点:无法解决循环引用的问题
标记清除算法:回收时,分为两个阶段:标记阶段和清除阶段。标记阶段通过Root节点标记出所有可达的对象,清除阶段回收所有不可达的对象。
- 优点:不需要对对象进行移动,且仅对不存活的对象进行处理,在存活对象大量的情况下,极为高效。
- 缺点:因为清除不可达对象后剩余的内存不连续,会产生大量的内存碎片,不利于大内存的分配。
复制算法:将内存空间等分为两块,每次只用一块;GC时,将正在使用内存空间存活的对象,移动的另一外一块内存空间,然后清除剩下所有的对象。
- 优点:存在大量不可达对象时,需要移动的对象较少,性能良好,而且不会造成内存碎片的问题。
- 缺点:内存折半
标记压缩算法:在标记清除算法上做了优化,首先,从根节点上出发,标记所有不可达对象,然后,将所有可达对象移动到内存的另一端,最后,清除所有不可达对象。
- 优点:不会折半内存,不会造成内存碎片
- 缺点:回收对象较少时,需要移动对象多,性能较差。
分代算法:基于不同对象的生命周期不同的事实,将内存分为三大区域:年轻代,年老代,持久代,不同代使用不同的回收算法,对回收效率有很大的提高,目前基本上所有的jvm都使用了这种gc算法。