https://blog.csdn.net/perfect_yu/article/details/128796059

强引用、软引用、弱引用、虚引用(强软弱虚

一、引用归纳

1、对于强引用,平时在编写代码时会经常使用。

2、而其他三种类型的引用,使用得最多就是软引用和弱引用,这两种既有相似之处又有区别,他们都来描述非必须对象。

3、被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。

4、Java中4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用

二、四种引用的详情

2.1 强引用

普通变量赋值即为强引用,如 A a = new A();

强引用的回收特点:

当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠回收具有强引用的对象,来解决内存不足的问题。通过 GC Root 的引用链,如果强引用不到该对象,该对象才能被回收。

如果想中断或者回收强引用对象可以显式地将引用赋值为null(a=null),这样的话JVM就会在合适的时间,进行垃圾回收。

2.2. 软引用(SoftReference)

“内存不够就回收,内存充足不回收”

“适合做缓存”

1、例如:SoftReference a = new SoftReference(new A());引用和对象通过SoftReference建立关联

2、当系统内存够用就保留不回收(及时发生了GC),内存不足时,会被回收

3、软引用自身不会被垃圾回收,因为GC Root还引用着,软引用自身需要配合引用队列来释放。