WeakHashMap

简介:

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://www.cnblogs.com/yjf512/p/7413236.html,如需转载请自行联系原作者

相关文章
|
存储 缓存 NoSQL
Redis进阶应用:Redis+Lua脚本实现复合操作
通过阅读本文将Redis+Lua有了一定的了解,并能使用脚本完成一些简单的复合操作。
|
移动开发 网络协议 算法
TCP中的粘包、拆包问题产生原因及解决方法
TCP中的粘包、拆包问题产生原因及解决方法
1383 0
TCP中的粘包、拆包问题产生原因及解决方法
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。
|
流计算
LabVIEW开发LED滚动显示程序
LabVIEW开发LED滚动显示程序
124 2
|
网络协议 Oracle Unix
Linux网络配置和操作命令
Linux网络配置和操作命令
167 0
|
数据库
ORA-01113: file 1 needs media recovery ORA-01110: data file 1:
把下面两个隐含参数加入到pfile中
370 0
|
消息中间件 存储 缓存
不愧是Alibaba技术官,Kafka的精髓全写这本“限量笔记”里,服了
分布式,是程序员必备技能之一,在面试过程中属于必备类的,在工作中更是会经常用到。而Kafka是一个分布式的基于发布订阅的消息队列,目前它的魅力是无穷的,对于Kafka的奥秘,还需要我们细细去探寻。 要谈对Kafka有多熟悉,我相信还是阿里的大佬们最有发言权,所以今天分享的内容,就是Alibaba内部供应的“限量笔记”,关于Kafka的精髓全部写在这里面了,不得不感叹:不愧是Alibaba的技术官啊,真的服了!
|
数据库 数据库管理 Python
Python 第8章课后习题参考答案
第8章课后习题参考答案
353 0
|
弹性计算 数据可视化 Java
ECS使用初体验
ECS、阿里云、Linux
|
前端开发 弹性计算 数据采集