Java虚拟机:GC算法深度解析(四)

  • 来源:
  • 更新日期:2018-05-23

摘要:从前面文章简单的评估可以看出标记/清除算法已经比较落后了,但是吃水不忘挖井人它是后面几种算法的前辈、是基础在某些场景下它也有用武之地。

 从前面文章简单的评估可以看出标记/清除算法已经比较落后了,但是吃水不忘挖井人它是后面几种算法的前辈、是基础在某些场景下它也有用武之地。

330490-14091606193126(4).jpg

终极算法 -- 分代收集算法
当前商业虚拟机都采用分代收集算法说它是终极算法:是因为它结合了前几种算法的优点将算法组合使用进行垃圾回收,说它是一种新的算法不如说它是对前几种算法的实际应用。分代收集算法的思想是按对象的存活周期不同将内存划分为几块一般是把Java堆分为新生代和老年代这样就可以根据各个年代的特点采用最合适的收集算法。
新生代:朝生夕灭存活时间很短
老年代:经过多次Minor GC而存活下来存活周期长
在新生代中每次垃圾回收都发现有大量的对象死去只有少量存活,所以采用复制算法回收新生代只需要付出少量对象的复制成本就可以完成收集;而老年代中对象的存活率高不适合采用复制算法,而且如果老年代采用复制算法它是没有额外的空间进行分配担保的因此必须使用标记/清理算法或者标记/整理算法来进行回收。
总结一下就是分代收集算法的原理是采用复制算法来收集新生代采用标记/清理算法或者标记/整理算法收集老年代。
小编介绍了几种收集算法的原理、优缺点以及使用场景的内容理解了这些知识为我们研究垃圾收集器的运行原理打下了基础。以上是小编个人学习的一点总结欢迎交流学习。