引用计数算法
使用一个计数器来记录对象被引用的次数。当对象被引用时,计数器加1;当对象的引用被解除时,计数器减1;当引计数器为0时,对象会被回收。
举个例子(假设下面代码使用引用计数算法):
package com.su.mybatis.oracle.controller;
public class Test {
public static void main(String[] args) {
String s1 = new String("a");//堆上创建对象a,计数器为1
String s2 = new String("b");//堆上创建对象b,计数器为1
s2 = s1;//对象a的计数器为2,对象b的计数器为0
s1 = null;//对象a的计数器为1
s2 = null;//对象a的计数器为0
}
}
图解
引用计数算法的优缺点
优点:实现简单,效率高;
缺点:一旦出现循环引用的情况,计数器始终>1,出现对象不能回收。
注意:由于引用计数算法不能解决循环引用带来的问题,JVM中并没有使用引用计数算法来作为GC中判断对象是否存活(回收)的算法。
如果有写的不对的地方,请大家多多批评指正,非常感谢!