四种引用方式

1、强引用(StrongReference)
2、软引用(SoftReference)
3、弱引用(WeakReference)
4、虚引用(PhantomReference)

强引用(StrongReference)

1、只要某个对象有强引用与之关联,JVM必定不会回收这个对象
2、即使内存不足,JVM宁愿抛出OutOfMemory错误也不会回收这种对象

例:

  Object object = new Object();
String str = "hello";

软引用(SoftReference)

1、用来描述一些有用但并不是必需的对象
2、对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象
3、很适合用来实现缓存:比如网页缓存、图片缓存等

例如:

 SoftReference aSoftRef = new SoftReference(aRef);  

弱引用(WeakReference)

1、弱引用是用来描述非必需对象的
2、当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

例如:

  WeakReference<People> reference = new WeakReference<People>(new People()); 

虚引用(PhantomReference)

1、不影响对象的生命周期
2、如果一个对象与虚引用关联,则跟没有引用与之关联一样
3、在任何时候都可能被垃圾回收器回收

例如:

    ReferenceQueue<String> queue = new ReferenceQueue<String>();  
PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);

对象的可达程度

强可达:无需引用直接可达
软可达:通过一个软引用可达
弱可达:通过一个弱引用可达
虚可达:通过一个虚引用可达
不可达:没有任何引用指向对象