1.强引用:与强引用关联的对象,JVM一定不会回收,内存不足时会抛出OutOfMemery。
2.软引用:与软引用关联的对象,在内存不足时会被JVM回收利用。
3.弱引用:只要JVM进行垃圾回收,就会被回收。
4.虚引用:和没引用关联是一样的,随时可能被回收。
软引用、弱引用可以和引用队列(ReferenceQueue)联合使用,如果引用被垃圾回收器回收,java虚拟机会把这个引用加入与之关联的引用队列中。
虚引用主要是用来跟踪对象被垃圾回收的活动。弱引用与虚引用的区别:虚引用必须和引用队列联合使用。
当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把虚引用加入与之关联的引用队列中。程序通过判断引用队列是否已经加入虚引用,来了解被引用的对象是否将要垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那就可以再引用对象的内存被回收之前采取必要的行动。
public class PhantomReferenceTest {
public static void main(String[] args) {
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference<String> phantomReference = new PhantomReference<String>("hello",referenceQueue);
}
}