一、概述
Java中,引用和对象是有关联的,如果要操作对象则必须要用引用进行。因此判断一个对象是否可以被回收,很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。简单来讲就是给对象中添加一个引用计数器,每当一个地方引用它,计数器的值就加1,每当一个引用失效时,计数器的值就减1。任何时刻当计数器的值为零的对象,就是不可能再被使用的,那么这个对象就是可以回收的对象。但是,主流的Java虚拟机里面都没有使用这种算法,最主要的原因就是就是它很难解决对象之间的相互循环引用的问题。
二、案例代码
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/17 11:21
* @Description: 引用计数算法垃圾回收
* 设置VM Options
* -Xms10m -Xmx10m -XX:+PrintGCDetails
*/
public class ReferenceCountGC {
/**
* 这个成员唯一的作用就是占用一点内存
*/
private byte[] bigSize = new byte[1024 * 1024 * 2];
Object instance = null;
public static void main(String[] args) {
ReferenceCountGC objectA = new ReferenceCountGC();
ReferenceCountGC objectB = new ReferenceCountGC();
objectA.instance = objectB;
objectB.instance = objectA;
objectA = null;
objectB = null;
System.gc();
}
}