Java中四种引用关系

在堆中产生一个数组或者一个对象后,可以在栈中定义一个特殊的变量指向这个数组/对象,这个变量的取值等于数组或对象在堆内存的首地址

强引用

  • 最常见的引用, A a = new A()就是强引用
  • GC永远不会回收强引用的对象

软引用

  • 一般将有用但是非必需的对象声明为软引用
  • 将要发生内存溢出之前,GC会把这些对象列进回收范围
  • SoftReference类指向的对象

弱引用

  • 将非必须对象声明为弱引用
  • 弱引用对象只能生存到下次GC前(无论内存是否足够,下次GC一定会会回收弱引用对象)
  • WeakReference类指向的对象

虚引用

  • 一个对象是否有虚引用的存在,完全不会对其生存时间进行影响
  • 这个对象在被回收时,可以收到一个系统通知