JDK里的设计模式.pdf

JDK里的设计模式.pdf

ID:52442838

大小:188.59 KB

页数:6页

时间:2020-03-27

JDK里的设计模式.pdf_第1页
JDK里的设计模式.pdf_第2页
JDK里的设计模式.pdf_第3页
JDK里的设计模式.pdf_第4页
JDK里的设计模式.pdf_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。