Java四种引用类型:①强引用默认存在,GC绝不回收,易致内存泄漏;②软引用在内存不足时回收,适合缓存;③弱引用在GC时立即回收,用于WeakHashMap等临时绑定;④虚引用无法获取对象,仅用于回收通知,需配合ReferenceQueue。

强引用:默认存在,GC绝不回收
强引用是Java中最基础、最常用的引用形式,比如 Object obj = new Object()。只要这个变量还持有对象,垃圾收集器(GC)就永远不会回收它——哪怕内存即将耗尽,JVM宁愿抛出 OutOfMemoryError,也不会动强引用对象。这也是内存泄漏的常见根源:比如静态集合长期持有一个大对象的强引用,而业务上早已不需要它。
软引用:内存告急时才回收,适合缓存
软引用通过 SoftReference
- 网页资源、图片、JSON解析结果等可重建但加载成本高的数据
- 使用时需调用 .get() 获取对象,并始终检查是否为 null
- 可选配合 ReferenceQueue 监听回收事件,便于清理关联资源
弱引用:GC一运行就回收,用于临时辅助
弱引用由 WeakReference
- WeakHashMap 的键:避免因Key强引用导致Map无法释放,造成内存堆积
- 监听器或回调的临时绑定,防止持有宿主对象导致无法释放
- 与 ReferenceQueue 配合,能快速感知对象已不可达
虚引用:不能取对象,只为回收通知
虚引用(PhantomReference
立即学习“Java免费学习笔记(深入)”;
- NIO中 DirectByteBuffer 的清理:在堆外内存释放前执行清理逻辑
- 自定义资源终结流程,替代不稳定的 finalize()
- 必须传入非null的 ReferenceQueue,否则虚引用毫无作用










