📚 分类
JVM
🕵🏽‍♀️ 问题描述
强引用、软引用、弱引用、虚引用的区别
👨‍🏫 问题讲解
❒ 强引用: 只有所有GC Roots对象都不通过【强引用]引用该对象,该对象才能被垃圾回收
User user = new User();
GC Root -> User对象

❒ 软引用: 仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收
User user = new User();
SoftReference softReference = new SoftReference(user);
GC Root -> SoftReference对象 - -> User对象

❒ 弱引用: 仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象
User user = newUser();
WeakReference weakReference = new WeakReference(user);
GC Root -> WeakReference对象 - - -> User对象

❒ 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存
User user = new User();
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference phantomReference = new PhantomReference(user,queue);
GC Root -> PhantomReference对象X  - - -> User1对象
GC Root -> PhantomReference对象Y  - - -> User2对象
🏳️‍🌈 问题总结
强引用、软引用、弱引用、虚引用的区别?

✔ 强引用: 只要所有GC Roots能找到,就不会被回收
✔ 软引用: 需要配合SoftReference使用,当垃圾多次回收,内存依然不够的时候会回收软引用对象
✔ 弱引用: 需要配合WeakReference使用,只要进行了垃圾回收,就会把弱引用对象回收
✔ 虚引用: 必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存
📖 问题信息
📈 浏览次数:9 | 📅 更新时间:2025-12-15 14:26:51
📦 创建信息
🏷️ ID:142 | 📅 创建时间:2025-02-02 14:37:09