欢迎来到天天文库
浏览记录
ID:52442838
大小:188.59 KB
页数:6页
时间:2020-03-27
《JDK里的设计模式.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JDK里的设计模式Java中一共有4种类型的引用:StrongReference、SoftReference、WeakReference以及PhantomReference(传说中的幽灵引用呵呵),这4种类型的引用与GC有着密切的关系,让我们逐一来看它们的定义和使用场景:1.StrongReferenceStrongReference是Java的默认引用实现,它会尽可能长时间的存活于JVM内,当没有任何对象指向它时GC执行后将会被回收@TestpublicvoidstrongReference(){Objectreferent=newO
2、bject();/***通过赋值创建StrongReference*/ObjectstrongReference=referent;assertSame(referent,strongReference);referent=null;System.gc();/***StrongReference在GC后不会被回收*/assertNotNull(strongReference);}2.WeakReference&WeakHashMapWeakReference,顾名思义,是一个弱引用,当所引用的对象在JVM内不再有强引用时,GC后weak
3、reference将会被自动回收@TestpublicvoidweakReference(){Objectreferent=newObject();WeakReferenceweakRerference=newWeakReference(referent);assertSame(referent,weakRerference.get());referent=null;System.gc();/***一旦没有指向referent的强引用,weakreference在GC后会被自动回收*/assertNull
4、(weakRerference.get());}WeakHashMap使用WeakReference作为key,一旦没有指向key的强引用,WeakHashMap在GC后将自动删除相关的entry@TestpublicvoidweakHashMap()throwsInterruptedException{MapweakHashMap=newWeakHashMap();Objectkey=newObject();Objectvalue=newObject();weakHashMa
5、p.put(key,value);assertTrue(weakHashMap.containsValue(value));key=null;System.gc();/***等待无效entries进入ReferenceQueue以便下一次调用getTable时被清理*/Thread.sleep(1000);/***一旦没有指向key的强引用,WeakHashMap在GC后将自动删除相关的entry*/assertFalse(weakHashMap.containsValue(value));}3.SoftReferenceSoftRef
6、erence于WeakReference的特性基本一致,最大的区别在于SoftReference会尽可能长的保留引用直到JVM内存不足时才会被回收(虚拟机保证),这一特性使得SoftReference非常适合缓存应用@TestpublicvoidsoftReference(){Objectreferent=newObject();SoftReferencesoftRerference=newSoftReference(referent);assertNotNull(softRerference.get()
7、);referent=null;System.gc();/***softreferences只有在jvmOutOfMemory之前才会被回收,所以它非常适合缓存应用*/assertNotNull(softRerference.get());}4.PhantomReference作为本文主角,PhantomReference(幽灵引用)与WeakReference和SoftReference有很大的不同,因为它的get()方法永远返回null,这也正是它名字的由来@TestpublicvoidphantomReferenceAlwaysN
8、ull(){Objectreferent=newObject();PhantomReferencephantomReference=newPhantomReference(r
此文档下载收益归作者所有