文档介绍:理解Java的GC与幽灵引用Java中一共有4种类型的引用:StrongReference、SoftReference、WeakReference以及PhantomReference(传说中的幽灵引用呵呵),这4种类型的引用与GC有着密切的关系,让我们逐一来看它们的定义和使用场景:,它会尽可能长时间的存活于JVM内,当没有任何对象指向它时GC执行后将会被回收***@TestpublicvoidstrongReference(){Objectreferent=newObject();/**通过赋值创建StrongReference*/ObjectstrongReference=referent;assertSame(referent,strongReference);referent=null;();/*StrongReference在GC后不会被回收*/assertNotNull(strongReference);}WeakReference&WeakHashMapWeakReference,顾名思义,是一个弱引用,当所引用的对象在JVM内不再有强引用时,GC后weakreference将会被自动回收***@TestpublicvoidweakReference(){Objectreferent=newObject();WeakReference<Object>weakRerference=newWeakReference<Object>(referent);assertSame(referent,());referent=null;();/**一旦没有指向referent的强引用,weakreference在GC后会被自动回收*/assertNull(());}WeakHashMap使用WeakReference作为key,一旦没有指向key的强引用,WeakHashMap在GC后将自动删除相关的******@TestpublicvoidweakHashMap()throwsInterruptedException{Map<Object,Object>weakHashMap=newWeakHashMap<Object,Object>();Objectkey=newObject();Objectvalue=newObject();(key,value);assertTrue((value));key=null;();/**等待无效entries进入ReferenceQueue以便下一次调用getTable时被清理*/(1000);/**一旦没有指向key的强引用,WeakHashMap在GC后将自动删除相关的entry*/assertFalse((value));}SoftReferenceSoftReference于WeakReference的特性基本一致,最大的区别在于SoftReference会尽可能长的保留引用直到JVM内存