Java中强引用、软引用、弱引用、虚引用的使用场景

Java中强引用、软引用、弱引用、虚引用,引用强度从大到小依次是强软弱虚。


Java中强引用、软引用、弱引用、虚引用的使用场景_第1张图片

强引用

强引用是引用关系最强的一种引用,比如

User user = new User();

这种就是强引用。user和堆对象强关联,通常不会被GC回收(除非满足根不可达或者使用“User user = null” 解绑)。

使用场景:一般用于常规业务编码。


软引用

软应用(SoftReference)比强引用的引用强度低一点,当OOM内存溢出时,被回收。软引用可以和一个引用队列ReferenceQueue联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。

使用场景:一般用于缓存,利用OOM时回收的特性设置缓存的场景。


弱引用

弱引用(WeakReference) 比软引用的引用强度低一点,在每次GC时,被回收。一般用于缓存,利用每次GC时回收的特性设置缓存的场景,比如ThreadLocal。


虚引用

虚引用(PhantomReference) 是最弱的一种引用,严格说没有引用。

使用场景:一般用于系统监控,监控GC什么时间进行了垃圾回收。

你可能感兴趣的:(Java)