只有三个属性:
1、private static final AtomicIntegerFieldUpdater<AbstractReferenceCounted> refCntUpdater =
AtomicIntegerFieldUpdater.newUpdater(AbstractReferenceCounted.class, "refCnt");
用于调用CAS原子方法进行引用加1。
2、private volatile int refCnt = 1; 最重要的计数属性。
2、private static final long REFCNT_FIELD_OFFSET; 用于保存refCnt 属性在内存中的地址。该地址的获取方法与JDK的UnSafe实现强相关。
主要的方法两个:
1、计数加: retain()
2、计数减: release()
另外,定义一个抽象的释放内存方法,供不同子类实现。