四种引用类型Java 中有强引用、软引用、弱引用和虚引用四种引用类型。强引用强引用是最普通的对象引用只要强引用还存在GC 就不会回收对象。最常见的例子是Object obj new Object()。只要对象仍然被强引用指向垃圾回收器就不会回收它即使内存不足也可能抛出OutOfMemoryError。软引用软引用通过SoftReference实现。内存充足时软引用对象通常不会被回收内存紧张时垃圾回收器可能清理软引用对象因此常用于内存敏感型缓存。不过它的回收时机由 JVM 决定不能作为严格可靠的缓存机制。弱引用弱引用通过WeakReference实现。如果对象只剩弱引用没有强引用或其他更强的引用指向它那么下一次垃圾回收时就可能被回收与当前内存是否充足没有直接关系。ThreadLocalMap的 key 是弱引用弱引用指向ThreadLocal对象value 仍然是对业务对象的强引用所以使用完ThreadLocal后仍要调用remove()。虚引用虚引用通过PhantomReference实现不影响对象存活也不能通过get()获取对象。它通常配合ReferenceQueue使用在对象即将被回收时接收通知用于资源清理和回收监控。速记强引用只要还在就不回收。软引用内存不足时可能回收。弱引用下一次 GC 可能回收。虚引用不能取对象主要用于回收跟踪。
阅读完成 · 觉得有帮助?