Java语言中引入Reference的目的是什么?
(1)实现对象声明周期的精细化管理,允许通过Reference改变对象的可达性状态,优化JVM的垃圾回收机制;
在设计高效缓存框架,诊断OOM问题时有利。
Java运行库中引用类型说明:
(1)分类:弱引用,软应用,幻引用,最终引用
(2)弱引用:通过get()方法返回对对象的引用
(3)引用的类层次结构:
Reference(抽象类)
|
-------------------------------------------------------------------------------
| | | |
PhantomReference WeakReference SoftReference FinalReference
SoftReference: 使用在实现内存敏感缓存:
WeakReference: 使用在规范化映射,也是实现缓存的一种方式;
FinalReference: 实现finalization
(4)四种状态
状态:active -- pending -- enqueue -- inactive
active: 新创建对象状态
pending: 暂存在pending-list列表中,准备被referenceHandler入队的元素
enqueue: queue中元素状态,从queue中移除,变为inactive
inactive:不可改变的状态
(5)参与者:
garbage collector: detects reachability of reference change
ReferenceQueue
ReferenceHandler
Finalizer