https://blog.csdn.net/perfect_yu/article/details/128796059
1、对于强引用,平时在编写代码时会经常使用。
2、而其他三种类型的引用,使用得最多就是软引用和弱引用,这两种既有相似之处又有区别,他们都来描述非必须对象。
3、被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。
4、Java中4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用
普通变量赋值即为强引用,如 A a = new A();
强引用的回收特点:
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠回收具有强引用的对象,来解决内存不足的问题。通过 GC Root 的引用链,如果强引用不到该对象,该对象才能被回收。
如果想中断或者回收强引用对象可以显式地将引用赋值为null(a=null),这样的话JVM就会在合适的时间,进行垃圾回收。
“内存不够就回收,内存充足不回收”
“适合做缓存”
1、例如:SoftReference a = new SoftReference(new A());引用和对象通过SoftReference建立关联
2、当系统内存够用就保留不回收(及时发生了GC),内存不足时,会被回收
3、软引用自身不会被垃圾回收,因为GC Root还引用着,软引用自身需要配合引用队列来释放。