#JVM垃圾回收算法之-标记清除
java垃圾回收算法之-引用计数器,这个算法其中一个优点便是,实时性,只要对象的引用计数器的值为0,则立刻回收。接下来介绍的标记清除算法,当对象的引用计数器的值为0时,不会立刻被回收的。
#概念介绍
#root对象
在标记清除算法中,会把如下对象称之为root对象
- 被栈中的变量(栈中存的是对象的引用)所引用的对象
- 被static变量引用的对象
#可访问的对象
如果栈中有一个变量a引用了一个对象,那么该对象是可访问的,如果该对象中的某一个字段引用了另一个对象b,那么b也是可访问的。可访问的对象也称之为live对象
#标记清除算法介绍
#该算法有两个阶段。
- 标记阶段:找到所有可访问的对象,做个标记
- 清除阶段:遍历堆,把未被标记的对象回收
备注:
该算法一般应用于老年代,因为老年代的对象生命周期比较长。
#标记清除算法的优点和缺点
1.优点
- 是可以解决循环引用的问题
- 必要时才回收(内存不足时)
2.缺点:
- 回收时,应用需要挂起,也就是stop the world。
- 标记和清除的效率不高,尤其是要扫描的对象比较多的时候
- 会造成内存碎片(会导致明明有内存空间,但是由于不连续,申请稍微大一些的对象无法做到)
原文: http://blog.csdn.net/linsongbin1/article/details/51577310