java 强引用 软引用 弱引用 虚引用 的个人理解!
public class ReferenceTest {public static void main(String[] args) {ReferenceQueue<String> rq=new ReferenceQueue<String>();//引用队列//强引用:只要引用存在,其对象就不会被垃圾回收String str=new String("str--StrongReference");//软引用:在垃圾回收时,发现内存不够时才会回收SoftReference<String> sr=new SoftReference<String>("str--SoftReference");//弱引用:在垃圾回收时,直接回收WeakReference<String> wr=new WeakReference<String>("str--WeakReference");//虚引用:对对象的生命周期完全不相关,只是当它指向的对象被回收时,虚引用会被加入到rq中.PhantomReference<String> pr =new PhantomReference<String>("str--PhantomReference",rq);System.out.println("-----------------before gc------------------");System.out.println(str);System.out.println(sr.get());System.out.println(wr.get());System.out.println(pr.get());Reference<? extends String> r=null;while((r=rq.poll())!=null){System.out.println("ReferenceQueue:"+" ref:"+r.toString()+" value:"+r.get());}System.gc();System.out.println("-----------------after gc------------------");System.out.println(str);System.out.println(sr.get());System.out.println(wr.get());System.out.println(pr.get());while((r=rq.poll())!=null){System.out.println("ReferenceQueue:"+" ref:"+r.toString()+" value:"+r.get());}}}下面是在我机器上运行的结果-----------------before gc------------------str--StrongReferencestr--SoftReferencestr--WeakReferencenull-----------------after gc------------------str--StrongReferencestr--SoftReferencenullnullReferenceQueue: ref:java.lang.ref.PhantomReference@c17164 value:null注意:ReferenceQueue: ref:java.lang.ref.PhantomReference@c17164 value:null 这一句打印出来,说明虚引用所指向的对象已经被垃圾回收器销毁了.?