WeakHashMap

今天在具体业务的时候看到HashMap和WeakHashMap的区别。因为PHP语言并没有这种概念。所以很好奇做了一下研究。

WeakHashMap

WeakHashMap所谓的“弱”是针对GC来说的。换句话说,GC操作的时候,会不会自动去回收掉WeakHashMap中已经没有被引用的数据?它的规则是这样的:如果WeakHashMap中的key是一个变量,并且这个变量没有被引用了。那么这个时候,系统gc的时候,就会把这个没有引用的HashMap的key,value删除。

具体看下面的代码:

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.mycompany.demo; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap; /**
*
* @author yejianfeng
*/
public class hashmap { public static void main(String[] args){
String a = new String("a");
String b = new String("b");
Map weakmap = new WeakHashMap(); weakmap.put(a, "aaa");
weakmap.put(b, "bbb"); 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:b:bbb }
}
}

上面的只是把a对象去掉引用,就相当于告诉gc可以进行回收了。

WeakHashMap中的具体Entry实现了WeakReference的接口,在put数据进入HashMap的时候把queue传递进去了。ReferenceQueue是WeakHashMap创建的一个Reference队列。当gc回收Entry的key的时候,就会把消息通知到这个队列中,然后这个hash就知道了这个key被删除了,同时就会把这个key对应的Entry进行删除了。

参考文章

http://rockybalboa.blog.51cto.com/1010693/813161/

最新文章

  1. Qt Undo Framework Demo
  2. UVA11987Almost Union-Find(并查集删除节点)
  3. 百度定位API报错:leaked ServiceConnection com.baidu.location.LocationClient$1@426122f0
  4. 16. 星际争霸之php设计模式--组合模式
  5. InnoDB一定会在索引中加上主键吗
  6. SICP 习题 (1.14)解题总结
  7. JS-------DOM0级事件处理和DOM2级事件处理-------简单记法
  8. 解码一个加密的js文件
  9. 编写自己的单点登录(SSO)服务
  10. 一个简单的创建dom的函数
  11. JS/jquery实现鼠标控制页面元素显隐
  12. IIS中报错弹出调试,系统日志-错误应用程序名称: w3wp.exe,版本: 8.5.9600.16384,时间戳: 0x5215df96(360主机卫士)
  13. javascript: Element.getBoundingClientRect() 获取元素在网页上的坐标位置
  14. Python数据类型——字符串
  15. OSPF补全计划-2
  16. SFTP工具类
  17. lfs(systemd版本)学习笔记-第3页
  18. Linux 学习笔记之超详细基础linux命令 Part 4
  19. php源码笔记
  20. python递归,装饰器,函数, 高阶函数

热门文章

  1. Docker 学习2 Docker基础用法
  2. UOJ#416. 【APIO2018】铁人两项
  3. MongoDB与SpringBoot整合(支持事务)
  4. django framawork
  5. 利用kibana插件对Elasticsearch进行bool查询
  6. 利用kibana插件对Elasticsearch查询
  7. 短网址API
  8. 关于WinCC OA
  9. 03SQLALchemy外键约束
  10. Pandas 0 数据结构Series