码迷,mamicode.com
首页 > 编程语言 > 详细

垃圾回收算法

时间:2015-08-30 00:51:34      阅读:151      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!