1 Java中引用
1.1 强引用(Strong Reference)
最普遍的引用:Object obj = new Object()
抛出OutOfMemoryError终止程序也不会回收具体引用的对象
通过将对象设置为null来弱化引用,使其被回收
1.2 软引用(Soft Reference)
对象处在有用但非必须的状态
只有当内存空间不足时,GC会回收该引用的的对象内存
可以用来实现高速缓存
代码:
String str = new String("abc");
SoftReferencesoftRef = new SoftReference(str);
1.3 弱引用(Weak Reference)
非必须的对象,比软引用更弱一些
GC时会被回收
被回收的概率也不大,因为GC优先级比较低
适用于引用偶尔被使用且不影响垃圾收集的对象
代码:
String str = new String("abc");
WeakReferenceweakRef = new WeakReference(str);
1.4 虚引用(Phantom Reference)
不会决定对象的生命周期
任何时候都可能被垃圾收集器回收
跟踪对象被垃圾收集器回收的活动,起哨兵作用
必须和引用队列ReferenceQueue联合使用
代码:
String str = new String("abc");
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(str, queue);
2 引用队列(ReferenceQueue)
无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达
存储关联的且被GC的软引用,弱引用以及虚引用
3 总结
被垃圾回收时间
用途
生存时间
强引用
从来不会
对象的一般状态
JVM停止运行时终止
软引用
在内存不足时
对象缓存
内存不足时终止
弱引用
在垃圾回收时
对象缓存
gc运行后终止
虚引用
Unknown
标记、哨兵
Unknown
四种引用类结构图
文章来源: www.oschina.net,作者:moon888,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/u/3777515/blog/3175346