JVM垃圾回收算法之-标记清除

義往昔 1年前 ⋅ 1803 阅读

java垃圾回收算法之-引用计数器,这个算法其中一个优点便是,实时性,只要对象的引用计数器的值为0,则立刻回收。接下来介绍的标记清除算法,当对象的引用计数器的值为0时,不会立刻被回收的。

概念介绍

root对象

在标记清除算法中,会把如下对象称之为root对象

  • 被栈中的变量(栈中存的是对象的引用)所引用的对象
  • 被static变量引用的对象

可访问的对象

如果栈中有一个变量a引用了一个对象,那么该对象是可访问的,如果该对象中的某一个字段引用了另一个对象b,那么b也是可访问的。可访问的对象也称之为live对象

标记清除算法介绍

该算法有两个阶段。

  1. 标记阶段:找到所有可访问的对象,做个标记
  2. 清除阶段:遍历堆,把未被标记的对象回收

备注:

该算法一般应用于老年代,因为老年代的对象生命周期比较长。

标记清除算法的优点和缺点

1.优点

  • 是可以解决循环引用的问题
  • 必要时才回收(内存不足时)

2.缺点:

  • 回收时,应用需要挂起,也就是stop the world。
  • 标记和清除的效率不高,尤其是要扫描的对象比较多的时候
  • 会造成内存碎片(会导致明明有内存空间,但是由于不连续,申请稍微大一些的对象无法做到)

原文: http://blog.csdn.net/linsongbin1/article/details/51577310


全部评论: 0

    我有话说: