引用计数器(Reference Counting)
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不可能再被使用的。
使用引用计数器算法进行内存管理的应用:
1)微软的COM(Component Object Model)技术
2)使用ActionScript3的FlashPlayer
3)Python语言
4)在游戏脚本领域被广泛应用的Squirrel
Java虚拟机没有选用引用计数算法管理内存,最主要的原因是因为它很难解决对象之间相互循环引用的问题。
引用计数器算法的缺陷:
public class ReferenceCountingGC{
public Object instance = null;
private static final int _1MB = 1024*1024;
/** 这个成员属性的唯一意义就是占点内存,以便能在GC日志中看清楚是否被回收过 */
private byte[] bigSize = new byte[2 * _1MB];
public static voi