1. **强引用(Strong Reference)**:
   - Java中默认声明的就是强引用,例如:`Object obj = new Object();`
   - 只要强引用存在,垃圾回收器将永远不会回收被引用的对象。
   - 如果想让对象被回收,可以将对象置为null。

2. **软引用(SoftReference)**:
   - 在内存足够的情况下,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象。
   - 如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。
   - 示例代码:`byte[] buff = new byte[1024 * 1024]; SoftReference<byte[]> sr = new SoftReference<>(buff);`

3. **弱引用(WeakReference)**:
   - 进行垃圾回收时,弱引用就会被回收。

4. **虚引用(PhantomReference)(幽灵引用/幻影引用)**:
   - 无法通过虚引用去获取对象。用途:用于gc时返回一个通知。虚引用主要用于跟踪对象的生命周期。

5. **引用队列(ReferenceQueue)**:
   - 引用队列可以与软引用、弱引用、虚引用一起配合使用。
   - 当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。
   - 程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。

介绍一下四种引用类型_虚引用

(1)强引用
Java中默认声明的就是强引用,比如:    
Object obj = new Object();
        obj = null;
只要强引用存在,垃圾回收器将永远不会回收被引用的对象。如果想被回收,可以将对象置为null; 
(2)软引用(SoftReference)
在内存足够的时候,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会跑出内存溢出异常。
        byte[] buff = new byte[1024 * 1024];
        SoftReference<byte[]> sr = new SoftReference<>(buff);
(3)弱引用(WeakReference)
进行垃圾回收时,弱引用就会被回收。
(4)虚引用(PhantomReference)
(5)引用队列(ReferenceQueue)
引用队列可以与软引用、弱引用、虚引用一起配合使用。
当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。
程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。