文章目录
1 四种引用类型
Java将引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种类型,每种引用强度依次逐渐减弱。
1.1 强引用
强引用即普遍意义上的引用,比如:Object o = new Object(),这里o就是一个强引用,只要这个引用关系存在,对象永远不会被回收,即使内存不足,JVM只会抛出OOM异常。
1.2 软引用
软引用用来指向一些后续可能会使用到但并非必须存在的对象,比如创建一个软引用:new SoftReference<>(new ArrayList<>()),这个软引用指向一个ArrayList对象。在系统将要发生OOM异常前,会把这个ArrayList对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出OOM异常。根据软引用这个特性,可将其使用于缓存的场景。
1.3 弱引用
弱引用WeakReference和软引用类似,也是用来指向那些非必须的对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾回收发生为止。当垃圾收集器开始工作,无论当前内存是否足够,都会回收掉只被弱引用指向的对象。弱引用在JDK中典型的应用有ThreadLocal。
1.4 虚引用
虚引用PhantomReference和弱引用一样也是发现即回收,其一般是用来管理堆外内存(直接内存)。
2 ThreadLocal
2.1 ThreadLocal源码解读
public class TestThreadLocal {
public static void main

本文介绍了Java中的四种引用类型:强引用、软引用、弱引用和虚引用,详细阐述了它们的区别和作用。接着深入讲解了ThreadLocal的工作原理,包括源码解读、内存泄漏问题及解决办法,并举例说明了ThreadLocal在Spring框架中的应用。
最低0.47元/天 解锁文章
917

被折叠的 条评论
为什么被折叠?



