首页 > 编程语言 > 详细

垃圾回收算法

时间:2015-08-30 00:50:08      阅读:194      评论:0      收藏:0      [点我收藏+]

Mark-Sweep 算法

标记-清除(Mark-Sweep)算法,分为 “标记”和 “清除”两个阶段:第一阶段标记出所有需要回收的对象, 在标记完成之后统一回收掉所有被比标记的对象。 这个算法主要有两个缺点: 1. 标记和清除过程的效率不高 2. 标记清除过后会产生大量不连续的内存碎片。由于空间碎片过多,可能会导致程序在运行过程中需要分配较大的对象时, 无法找到足够的连续内存空间而导致触犯另一次垃圾回收动作。

 

技术分享

 

Coping 算法

复制算法将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将存活的对象复制到另外一块上面,然后把已经使用的内存空间一次清理掉。coping算法每次只对一块进行内存回收,内存分配时不用考虑内存碎片的问题,实现简单,运行高效。这个算法的代价是将内存缩小为了原来一半,空间使用效率不高。

技术分享

 

Mark-Compact 算法

复制算法在对象的存活率较高是要执行很多的复制操作,效率就会变得低下。在老年代的对象一般生存周期比较长,一般不适合采用复制算法。针对老年代对象的生存特点,“标记-整理”(Mark-Compact)算法应运而生。 Mark-Compact 算法的标记过程与 Mark-Sweep算法一样,但后续的步骤不是直接回收对象,而是让所存活的对象都向一端移动,然后把端边界以外的内存清理掉。

 

技术分享

 

参考书目:

《深入理解Java虚拟机:JVM高级特性与最佳实践》

《深入java虚拟机》

垃圾回收算法

原文:http://www.cnblogs.com/vincent2010/p/4770131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!