Appearance
如何判断一个对象死亡?当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡;判断对象存活的算法一般有两种:引用计数算法和可达性分析算法。
引用计数算法
引用计数算法:对每个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。
对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。
- 优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。
- 缺点: 需要单独的字段存储计数器,增加存储空间的开销,每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销。引用计数器有一个严重的问题,即无法处理循环引用的情况。这是一条致命缺陷,导致在Java的垃圾回收器中没有使用这类算法。