1.强引用
2.软引用
3.弱引用
4.虚引用
5.软引用和弱引用的使用场景
1.强引用
强引用就是我们最常见的对象引用,就是我们平时写的(Person person = new Person();
) 强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象,在JAVA中最常见的引用就是强引用,把一个对象赋值给一个引用变量,这个引用变量就是一个强引用,当一个对象被强引用变量引用的时候,它就处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远不会被用到,JVM和不会回收,因此强引用就是造成JAVA内存泄漏的主要原因之一。
注意点:
对于一个普通的对象,如果没有其它的引用关系,只要通过了引用的作用域或者是显式地将强引用赋值为null。一般认为就是可以被垃圾收集的了。
当内存不足,JVM开始垃圾回收,对于强引用的对象,就算出现了OOM也不会对该对象进行回收。
2.软引用
如果我们写的对象是软引用,那么:
内存足够的前提下,不回收该对象
内存不够的前提下,回收该对象
软引用通常再对内存敏感的程序中,比如高速缓存就有用到软引用。
我们可以用代码示范一下:
首先我们要介绍一个类,软引用类:
SoftReference