文章目录

在Java中, 我们知道对象都是以引用的形式存在于代码中的.
Java的自动垃圾回收, 就是基于引用, 如果一个对象再也没有人引用, 就会回收这个对象.
但是实际上还会有别的回收程度: 我要使用一个对象, 但是我可以在内存紧张的时候允许回收这个对象, 甚至我允许只要有垃圾回收就把这个对象回收. 换句话说, 我对这个对象的使用并没有”那么强”的要求, 为了内存分配我可以让渡空间.
基于上述实际情况, Java中专门创建了新的类来允许上述让渡行为, 即Reference. 针对不同的引用层级, 又分为以下几种引用:

  1. 强引用. 即一般的对象引用声明. 拥有强引用的对象, 任何时候都不会被回收.
  2. 软引用. SoftReference. 仅有软引用的对象, 在内存不足时允许回收.
  3. 弱引用. WeakReference. 仅有弱引用的对象, 在下次垃圾回收时允许被回收.
  4. 虚引用. PhantomReference. 虚引用只能作为引用标记, 不影响对象生命周期. 仅有虚引用的对象, 等效于没有引用, 但Java的实现中允许给虚引用添加一个队列, 当引用指向的对象其可触及性发生变化时, 该对象会被添加到指定的引用队列(这其实是抽象类Reference的实现). 例如, 如果我们想要在某个对象确实被回收后, 才创建新的对象, 那么我们可以对这个对象创建一个虚引用, 并监控传入的引用队列, 在队列非空时创建新对象.
文章目录