java 弱哈希映射表WeakHashMap原理
来源:互联网 发布:什么是淘宝直通车图片 编辑:程序博客网 时间:2024/06/05 01:49
弱哈希映射表的原理其实很好理解,首先我们要知道HashMap的原理。如果我们将一个对象a以及他的引用A作为一个key值关联某个Value值后put入HashMap中,那么这个a对象的引用不仅仅有A,而且有一个HashMap中持有的引用,一共两个引用。WeakHashMap的原理也相同,此时在WeakHashMap中的a也持有两个引用,一个是A,另一个是WeakHashMap的散列表持有的引用。
那么现在分析弱哈希映射表的原理:WeakHashMap散列表持有所有key的引用是弱引用。弱引用的概念是:如果一个对象仅有一个弱引用指向它,那么在下次GC进行回收时会将其回收。所以说,上述的a对象,如果A引用不再指向它,而且也没有其他的地方使用到a对象形成它的引用的话,在下一次垃圾回收时a对象表示的k-v对将被从WeakHashMap中删除。
下面的例子表示当A变为null时,WeakHashMap中的a被回收:
package Test;import java.util.*;public class test { public static void main(String[] args) throws Exception { String a = new String("a"); Map weakmap = new WeakHashMap(); weakmap.put(a, "aaa"); a = null; System.gc(); Iterator j = weakmap.entrySet().iterator(); while (j.hasNext()) { Map.Entry en = (Map.Entry) j.next(); System.out.println("weakmap:" + en.getKey() + ":" + en.getValue()); } }}
上述例子不会输出任何,因为此时weakmap中的a已经被回收。
下面例子表示当A变为null时,但是HashMap中仍然保存着a的一个引用,不能满足回收条件,WeakHashMap中的a不被回收:
package Test;import java.util.*;public class test { public static void main(String[] args) throws Exception { String a = new String("a"); Map weakmap = new WeakHashMap(); Map map = new HashMap(); map.put(a, "aaa"); weakmap.put(a, "aaa"); //map.remove(a); a = null; System.gc(); Iterator j = weakmap.entrySet().iterator(); while (j.hasNext()) { Map.Entry en = (Map.Entry) j.next(); System.out.println("weakmap:" + en.getKey() + ":" + en.getValue()); } }}
结果输出:
weakmap:a:aaa
如果我们将上面代码中的注释行:map.remove(a);加入其中,那么最后会没有任何输出,因为HashMap中保存着a的最后一个非弱引用,如果此引用也被删除则a被回收。
阅读全文
1 0
- java 弱哈希映射表WeakHashMap原理
- 弱散列映射表:WeakHashMap
- java WeakHashMap 原理
- WeakHashMap 原理
- Java中WeakHashMap实现原理深究
- java WeakHashMap
- Java WeakHashMap
- 深入Java集合学习系列:WeakHashMap的实现原理
- 深入Java集合学习系列:WeakHashMap的实现原理
- 深入Java集合源码学习系列:WeakHashMap的实现原理
- WeakHashMap原理分析
- WeakHashMap原理解读
- weakhashmap使用原理
- WeakHashMap 用法和原理
- WeakHashMap的Weak原理
- WeakHashMap的实现原理
- Java映射原理
- Java WeakHashMap使用陷阱
- 机器学习中应用到的概率论的知识(作为回顾)
- 《深度学习原理与TensorFlow实践》学习笔记(三)
- struts2--单个文件上传
- Vim教程二:文档编辑
- Java(No.1)—Java开发环境的搭建
- java 弱哈希映射表WeakHashMap原理
- 使用数据工厂模式生成测试数据
- leetcode:Is Subsequence
- 简单旋转加载
- Django-MongoDB的使用
- JAVA ArrayList案例
- Red black tree
- Nginx安装、配置及使用总结
- Red Giant Trapcode Suite 12.0 含注册码