欢迎来到天天文库
浏览记录
ID:1771651
大小:25.12 KB
页数:6页
时间:2017-11-13
《理解 java 的 gc 与 幽灵引用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、理解Java的GC与幽灵引用 Java中一共有4种类型的引用:StrongReference、SoftReference、WeakReference以及PhantomReference(传说中的幽灵引用呵呵), 这4种类型的引用与GC有着密切的关系, 让我们逐一来看它们的定义和使用场景: 1.StrongReference StrongReference是Java的默认引用实现, 它会尽可能长时间的存活于JVM内,当没有任何对象指向它时GC执行后将会被回收Java代码 1.@Test 2.public void st
2、rongReference() { 3. Object referent = new Object(); 4. 5. /** 6. * 通过赋值创建 StrongReference 7. */ 8. Object strongReference = referent; 9. 10. assertSame(referent, strongReference); 11. 12. referent = null; 13. System.gc(); 14. 15. /**
3、 16. * StrongReference 在 GC 后不会被回收 17. */ 18. assertNotNull(strongReference); 19.} 2.WeakReference&WeakHashMapWeakReference,顾名思义, 是一个弱引用, 当所引用的对象在JVM内不再有强引用时,GC后weakreference将会被自动回收Java代码 1.@Test 2.public void weakReference() { 3. Object referent = new Object(); 4
4、. WeakReference weakRerference = new WeakReference(referent); 5. 6. assertSame(referent, weakRerference.get()); 7. 1. referent = null; 2. System.gc(); 3. 4. /** 5. * 一旦没有指向 referent 的强引用, weak reference 在 GC 后会被自动回收 6. */ 7. assertNu
5、ll(weakRerference.get()); 8.} WeakHashMap使用WeakReference作为key,一旦没有指向key的强引用,WeakHashMap在GC后将自动删除相关的entryJava代码 1.@Test 2.public void weakHashMap() throws InterruptedException { 3. Map weakHashMap = new WeakHashMap(); 4. Object key = new Object();
6、5. Object value = new Object(); 6. weakHashMap.put(key, value); 7. 8. assertTrue(weakHashMap.containsValue(value)); 9. 10. key = null; 11. System.gc(); 12. 13. /** 14. * 等待无效 entries 进入 ReferenceQueue 以便下一次调用 getTable 时被清理 15. */ 16. Thread.slee
7、p(1000); 17. 18. /** 19. * 一旦没有指向 key 的强引用, WeakHashMap 在 GC 后将自动删除相关的 entry 20. */ 21. assertFalse(weakHashMap.containsValue(value)); 22.} 3.SoftReferenceSoftReference于WeakReference的特性基本一致,最大的区别在于SoftReference会尽可能长的保留引用直到JV
此文档下载收益归作者所有