一、四种引用分别是什么通俗比喻把对象比作手机强引用→手里紧紧攥着扔不掉软引用→放包里内存够就留着不够就扔弱引用→放桌上GC 一来就拿走虚引用→贴个标签根本拿不到手机只用来跟踪回收二、专业定义 回收时机面试标准答案1. 强引用Strong Reference默认引用平时写的 99% 都是它Object obj new Object();特点最强只要强引用还在GC 永远不会回收内存不够直接抛OOM回收时机永远不回收除非 obj null使用场景所有业务对象、普通变量2. 软引用Soft Reference内存不够才回收用于缓存SoftReferenceObject sr new SoftReference(obj);特点内存充足不回收内存不足立即回收回收后返回 null回收时机OOM 前最后一刻回收使用场景缓存图片缓存、网页缓存3. 弱引用Weak ReferenceGC 一来就回收WeakReferenceObject wr new WeakReference(obj);特点不管内存够不够只要发生 GC立即回收回收时机每次 GC 必收使用场景临时缓存、ThreadLocal、WeakHashMap4. 虚引用Phantom Reference最弱等于没有引用只为了监听回收ReferenceQueue queue new ReferenceQueue(); PhantomReferenceObject pr new PhantomReference(obj, queue);特点永远拿不到对象必须配合引用队列使用唯一作用监听对象什么时候被回收回收时机和没有引用一样随时会被回收使用场景堆外内存释放、NIO、监控对象回收三、一张表彻底分清面试直接背引用类型回收时机强度用途强引用永不回收除非置 null最强业务对象软引用内存不足才回收强缓存弱引用GC 一来就回收弱ThreadLocal、临时缓存虚引用随时回收拿不到对象最弱监听回收、堆外内存四、最关键的 3 句总结强引用 绝不回收软引用 内存不够才回收弱引用 一 GC 就回收虚引用 拿不到对象只监听回收
四种引用解析
一、四种引用分别是什么通俗比喻把对象比作手机强引用→手里紧紧攥着扔不掉软引用→放包里内存够就留着不够就扔弱引用→放桌上GC 一来就拿走虚引用→贴个标签根本拿不到手机只用来跟踪回收二、专业定义 回收时机面试标准答案1. 强引用Strong Reference默认引用平时写的 99% 都是它Object obj new Object();特点最强只要强引用还在GC 永远不会回收内存不够直接抛OOM回收时机永远不回收除非 obj null使用场景所有业务对象、普通变量2. 软引用Soft Reference内存不够才回收用于缓存SoftReferenceObject sr new SoftReference(obj);特点内存充足不回收内存不足立即回收回收后返回 null回收时机OOM 前最后一刻回收使用场景缓存图片缓存、网页缓存3. 弱引用Weak ReferenceGC 一来就回收WeakReferenceObject wr new WeakReference(obj);特点不管内存够不够只要发生 GC立即回收回收时机每次 GC 必收使用场景临时缓存、ThreadLocal、WeakHashMap4. 虚引用Phantom Reference最弱等于没有引用只为了监听回收ReferenceQueue queue new ReferenceQueue(); PhantomReferenceObject pr new PhantomReference(obj, queue);特点永远拿不到对象必须配合引用队列使用唯一作用监听对象什么时候被回收回收时机和没有引用一样随时会被回收使用场景堆外内存释放、NIO、监控对象回收三、一张表彻底分清面试直接背引用类型回收时机强度用途强引用永不回收除非置 null最强业务对象软引用内存不足才回收强缓存弱引用GC 一来就回收弱ThreadLocal、临时缓存虚引用随时回收拿不到对象最弱监听回收、堆外内存四、最关键的 3 句总结强引用 绝不回收软引用 内存不够才回收弱引用 一 GC 就回收虚引用 拿不到对象只监听回收