java 引用类型

发布时间 2023-04-14 14:08:32作者: HANGYCHN

共分为4种,强弱软徐

强引用

直接使用 new 创建的对象。当触发 GC 时,只要是垃圾就回收

软引用

当触发 GC 时,与是否是垃圾对象无关,意味着不管是不是垃圾对象都不会被回收,只有当内存不足时才回收(内存缓存场景)

Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;  // 使对象只被软引用关联
Object sfObj = sf.get(); // 使用这个对象

弱引用

当触发 GC 就回收,不管是否是垃圾,也不管内存是否够用

Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null; // 使对象只被软弱用关联
Object wfObj = wf.get(); // 使用这个对象

虚引用

ReferenceQueue queue = new ReferenceQueue();
// 创建一个对象的虚引用,传入 ReferenceQueue
PhantomReference<byte[]> reference = new PhantomReference<byte[]>(new byte[1], queue);
// 获取到的值是 null!当发生 GC 时,虚引用对象会被回收,这时才能拿到对象(有啥用?)
System.out.println(reference.get());