GCJava中引用
1.1 强引用(Strong Reference)
- 最普遍的引用:Object obj = new Object()
- 抛出OutOfMemoryError终止程序也不会回收具体引用的对象
- 通过将对象设置为null来弱化引用,使其被回收
1.2 软引用(Soft Reference)
- 对象处在有用但非必须的状态
- 只有当内存空间不足时,GC会回收该引用的的对象内存
- 可以用来实现高速缓存
代码:
String str = new String("abc");
SoftReference<String> softRef = new SoftReference<String>(str);
1.3 弱引用(Weak Reference)
- 非必须的对象,比软引用更弱一些
- GC时会被回收
- 被回收的概率也不大,因为GC优先级比较低
- 适用于引用偶尔被使用且不影响垃圾收集的对象
代码:
String str = new String("abc");
WeakReference<String> weakRef = new WeakReference<String>(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
四种引用类结构图
以上是 GCJava中引用 的全部内容, 来源链接: utcz.com/z/513839.html