一个WeakHashMap的问题 [问题点数:50分]

Bbs5
本版专家分:2191
结帖率 98.04%
Bbs2
本版专家分:228
Bbs7
本版专家分:12055
Blank
金牌 2018年7月 总版技术专家分月排行榜第一
2018年6月 总版技术专家分月排行榜第一
Blank
红花 2019年3月 Java大版内专家分月排行榜第一
2018年9月 Java大版内专家分月排行榜第一
2018年8月 Java大版内专家分月排行榜第一
2018年7月 Java大版内专家分月排行榜第一
2018年6月 Java大版内专家分月排行榜第一
Bbs7
本版专家分:12055
Blank
金牌 2018年7月 总版技术专家分月排行榜第一
2018年6月 总版技术专家分月排行榜第一
Blank
红花 2019年3月 Java大版内专家分月排行榜第一
2018年9月 Java大版内专家分月排行榜第一
2018年8月 Java大版内专家分月排行榜第一
2018年7月 Java大版内专家分月排行榜第一
2018年6月 Java大版内专家分月排行榜第一
Bbs7
本版专家分:12055
Blank
金牌 2018年7月 总版技术专家分月排行榜第一
2018年6月 总版技术专家分月排行榜第一
Blank
红花 2019年3月 Java大版内专家分月排行榜第一
2018年9月 Java大版内专家分月排行榜第一
2018年8月 Java大版内专家分月排行榜第一
2018年7月 Java大版内专家分月排行榜第一
2018年6月 Java大版内专家分月排行榜第一
Bbs5
本版专家分:2191
WeakHashMap工作原理
基本原理WeakHashMap特点是,当除了自身有对key的引用外,此key没有其他引用,那么WeakHashMap会在下次对WeakHashMap进行增删改查操作时及时丢弃该键值对,节约内存使用,此特性使得WeakHashMap非常适合构建缓存系统。 WeakHashMap是主要通过expungeStaleEntries函数的来实现移除其内部不用的entry从而达到的自动释放内存的目的。基本上只...
JDK1.8源码逐字逐句带你理解WeakHashMap底层
WeakHashMap其实也是java不常见的东西,但是和linkedHashMap一样,有它自己独特的功能。在本篇博文中我会用例子详细介绍它独有的属性,同时会对照源码来解释为什么它具备这样的功能。在知识点中会扩展关于引用的相关知识,帮助后面的理解。笔者目前整理的一些blog针对面试都是超高频出现的。
WeakHashMap的一些理解
WeakHashMap在GC的时候会清除未被强引用的键值,接下来便分析一下是如何做到的。首先看一下其内部Entry对象的结构,Entry继承了WeakReference,从Entry的构造函数可以知道,在put<em>一个</em>key-value时,key作为<em>一个</em>弱引用而存在,getKey()也是返回这个key的引用,这里可以看到unmaskNull的作用是对应于put了<em>一个</em>null的key,当put的key为...
WeakHashMap源码探讨(基于JDK1.8)
一,基本概念 ①简介 WeakHashMap跟普通的HashMap不同,WeakHashMap的行为一定程度上基于垃圾收集器的行为,因此一些Map数据结构对应的常识在WeakHashMap上会失效——size()方法的返回值会随着程序的运行变小,isEmpty()方法的返回值会从false变成true等等。 ②WeakHashMap的继承结构 public class WeakHash...
JDK容器与并发—Map—WeakHashMap
概述       基于弱引用键实现的HashMap,非线程安全。 1)当key所引用的对象只有弱引用时,在GC回收该对象后,会自动删除所关联的Entry; 2)其行为部分依赖GC; 3)value是强引用的。确保value没有直接或间接引用key,否则会阻止key引用对象的回收。间接引用:value1强引用key2的对象,其所关联的value2强引用key1的对象。 4)迭代器fail-
WeakHashMap 用法和原理
 在《Effective Java》一书中第六条,消除陈旧对象时,提到了weakHashMap,看了下还是适用的,即在我们使用短时间内就过期的缓存时最好使用weakHashMap,它包含了<em>一个</em>自动调用的方法expungeStaleEntries,这样就会在值被引用后直接执行这个隐含的方法,将不用的键清除掉。  测试了一下 package com.alibaba.itbu.job.billing...
WeakHashMap深入理解
这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap
WeakHashMap的使用场景
WeakHashMap在tomcat中当缓存的理解
深入Java集合学习系列:WeakHashMap的实现原理
这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap
jdk源码分析之WeakHashMap
基本原理WeakHashMap特点是,当除了自身有对key的引用外,此key没有其他引用,那么WeakHashMap会在下次对WeakHashMap进行增删改查操作时及时丢弃该键值对,节约内存使用,此特性使得WeakHashMap非常适合构建缓存系统。 WeakHashMap是主要通过expungeStaleEntries函数的来实现移除其内部不用的entry从而达到的自动释放内存的目的。基本上只
解析WeakHashMap与HashMap的区别详解
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值, 见实例:此例子中声明了两个Map对象,<em>一个</em>是HashMap,<em>一个</em>是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap  remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于a对象而
Java的弱引用—WeakHashMap
在《Effective Java》中的p23页有涉及到WeakHashMap的相关知识,在这篇文章中做<em>一个</em>总结以及介绍一下相关知识。在这里我们分成三个部分来说明一下,这只是我自己参看JDK源码和上网搜索资料得到的结果,如有错误,欢迎指出,我不胜荣幸。WeakHashMap和HashMap有什么不同我们知道WeakHashMap是弱引用,而HashMap是强引用。 这就是说当我们给Java虚拟机分配
《java源码分析系列》WeakHashMap和HashMap的区别
WeakHashMap和HashMap的区别前面对HashMap的源码和WeakHashMap的源码分别进行了分析。在WeakHashMap源码分析博文中有对与HashMap区别的比较,但是不够具体系统。加上本人看了一些相关的博文,发现了一些好的例子来说明这两者的区别,因此,就有了这篇博文。WeakHashMap和HashMap一样,WeakHashMap也是<em>一个</em>散列表,它存储的内容也是键值对(k...
对WeakHashMap的使用不慎导致内存溢出分析
对WeakHashMap的使用不慎导致内存溢出分析: 目前社区中有几个应用使用了类似Locker的代码,基本上都是从消息系统引擎中提取出来的,唯一的区别在于消息中使用的Locker中的id的类型为long,而id在作为键被put进Map时被JVM自动转换成了Long,因此避免了WeakHashMap中的键被值所引用。而如果使用String作为id则会因为Map中的值引用了自己的
使用WeakHashMap创建具有过期时间的本地缓存
java中为了让程序员能参与到垃圾回收机制中(不是说java的GC是全自动的吗?这要看从哪个方面讲了,其实如果开发人员能熟练掌握java的gc原理,对提升系统的稳定性有极大帮助),设计了4种引用级别:分别是强引用(new 出来的)、软引用、弱引用和虚引用。 本文不打算介绍这几种引用的用法。还不了解它们的读者可以自行百度(国内的几个搜索引擎,还是百度 最适合程序员)。 不过如果能使用谷歌的还是要...
Integer做WeakHashMap的Key应注意的问题
WeakHashMap使用弱引用来作为Map的Key,利用虚拟机的垃圾回收机制能自动释放Map中没有被使用的条目。但是WeakHashMap释放条目是有条件的:首先条目的Key在系统中没有强引用指向;另外,条目的释放是在垃圾回收之后第一次访问这个WeakHashMap时完成的。 而当我们想要获取<em>一个</em>Integer对象时,为了利用Integer类本身的缓存,减少堆中Integer对
怎样和何时使用WeakHashMap类
WeakHashMap是<em>一个</em>特殊的Map实现。map的键存储在WeakReference中引用。 WeakHashMap函数与HashMap相同,除了有<em>一个</em>重要的例外:如果Java存储管理器不再有强引用对象作为键,那么map中的条目将被移除。 创建<em>一个</em>WeakHashMap函数: HashMap map=new WeakHashMap();你能够使用WeakHashMap通过对资源保持引用但
java WeakHashMap学习(key是弱引用)
在Java集合中有一种特殊的Map类型:WeakHashMap。 WeakHashMap 继承于AbstractMap,实现了Map接口。 和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 [size=medium][color=red][b]不过WeakHashMap的键是“弱键”,里面存放了键对象的弱引...
WeakHashMap 用法和原理
在《Effective Java》一书中第六条,消除陈旧对象时,提到了weakHashMap,看了下还是适用的,即在我们使用短时间内就过期的缓存时最好使用weakHashMap,它包含了<em>一个</em>自动调用的方法expungeStaleEntries,这样就会在值被引用后直接执行这个隐含的方法,将不用的键清除掉。  测试了一下 Java代码   package com.ali
简单模拟WeakHashMap
简单模拟一下上篇文章中提到的WeakHashMap,具体代码如下: 1、创建<em>一个</em>模拟Map类: class WeakMapTest&amp;lt;K, V&amp;gt; { private ReferenceQueue&amp;lt;K&amp;gt; rq = new ReferenceQueue&amp;lt;K&amp;gt;(); private List&amp;lt;MyEntry&amp;gt; list = new Arra...
java 弱哈希映射表WeakHashMap原理
弱哈希映射表的原理其实很好理解,首先我们要知道HashMap的原理。如果我们将<em>一个</em>对象a以及他的引用A作为<em>一个</em>key值关联某个Value值后put入HashMap中,那么这个a对象的引用不仅仅有A,而且有<em>一个</em>HashMap中持有的引用,一共两个引用。WeakHashMap的原理也相同,此时在WeakHashMap中的a也持有两个引用,<em>一个</em>是A,另<em>一个</em>是WeakHashMap的散列表持有的引用。那么现
WeakHashMap
WeakHashMap map = new WeakHashMap();rnfor (int i = 0 ; i < 10000 ; i ++)rnrn map.put(new Integer(i) , new Integer(i));rnrnSystem.gc();rnSystem.out.println("isEmpty="+map.isEmpty()); // 1rnSystem.out.println(map); // 2rnSystem.out.println("size="+map.size()); // 3rnrn由于垃圾回收的不确定性,多次运行上述代码rn其间有出现这样的结果:rnisEmpty=falsernrnsize=0rnrn但是2处代码始终输出rnrn实在是不理解啊....
WeakHashMap的学习笔记
1、WeakHashMap的简单介绍 WeakHashMap也是Map中的一种,它的特殊之处在于它其中的对象,可能会被GC自动回收,也就是数据会凭空消失,即使程序员没有调用remove()或者clean()方法,那么你就会有疑问了,这种数据会凭空消失,那为什么还要设计这种类?其实答案是WeakHashMap主要用于缓存的情况,缓存一般用于内存不够的情况下,设置缓存可以大大提高系统的效率,缓存的空间...
线程死锁CPU过高,请求原因分析
线程死锁 CPU过高 WeakHashMap 请求原因分析
误用WeakHashMap引起的死循环cpu跑满问题
最近使用mvel 2.2.0.Final,出现一次cpu跑满,经过线程栈分析,发现是误用WeakHashMap引起的。 故障现场: 看WeakHashMap源码: public V get(Object key) { Object k = maskNull(key); int h = hash(k); Entry&amp;lt;K...
weakhashmap使用原理
1、深入理解<em>weakhashmap</em>: 弱引用:解决了当key不正常使用时,CG能清理;而强引用 即普通类如stringbuffer,虚拟机会抛出内存溢出的error (程序不能运行),这证明了异常可以处理,而error不能被try catch处理,比较严重。 notes:不正常使用,即当map对象保存的a移除且为null,同时只有weakhash保存a时,此时<em>weakhashmap</em>自动放弃。
统一管理项目中的接口回调
单例统一管理项目中的接口
HashMap在并发环境下发生死循环
HashMap不是线程安全的,在高并发的某种情况下会发生死循环
JDK1.8:JAVA数据结构一:HashMap最经典解析
HashMap 掌握好HashMap要从底层看起: public class HashMap&amp;amp;amp;lt;K,V&amp;amp;amp;gt; extends AbstractMap&amp;amp;amp;lt;K,V&amp;amp;amp;gt; implements Map&amp;amp;amp;lt;K,V&amp;amp;amp;gt;, Cloneable, Serializable HashMap继承AbstractMap实现Map、Cloneable 、Seriali
WeakHashMap 引用队列的问题
分析源码,明明是key构成了WeakReference,按理queue中存储的是key,为什么在执行expungeStaleEntries函数的时候queue.poll出来的对象可以转换为Entry,这点实在不明白,请各位高手解答!!!
【九】线程副本ThreadLocal,及WeakHashMap
实现多线程安全的三种方法, 1. 使用锁机制 synchronize、lock方式:为资源加锁,可参考我前面文章。 2. 使用 java.util.concurrent 下面的类库:有JDK提供的线程安全的集合类:AtomicInteger、AtomicStampedReference、ConcurrentHashMap、CopyOnWriteArrayList、ReentrantLock,F...
JAVA弱引用
什么是JAVA弱引用 简单来讲就是不保证不被垃圾回收器回收的引用地址。所以这个还是和垃圾回收器有关,那什么样的地址会被垃圾回收器回收呢?在堆中没有强引用链关联的内存地址将被垃圾回收器回收,回收之前将调用finalize()方法。 那么String s = &quot;abc&quot;,就可以称之为强引用,等s = null。垃圾回收器就会在某个时刻自动将&quot;abc&quot;占用的内存回收掉。 而弱引用(WeakRefe...
WeakHashMap的清除问题
代码如下:rn---------------------------------------------------------------------------------------------------rnimport java.util.*;rnrnpublic class Test14 rn public static void main(String[] args) rn Map map=new WeakHashMap();rn map.put("3", "future");rn map.put("2", "good");rn map.put(new String("1"), "LLL");rn rn System.out.println(map); //此处输出的是1=LLL, 2=good, 3=futurern System.gc();rn System.out.println(map); //而此处输出的是2=good, 3=futurern rnrnrnrn为什么改成"new String('1')"才能被清除?
Java 集合:Map 系列(WeakHashMap概念)
WeakHashMap 是<em>一个</em>实现了 Map 的哈希表,当它的 key 值不再被引用的时候,它的 entry 会自动被释放。所以说,当放入<em>一个</em>键值对的时候,过一段时间,该键值对可能不再存在。WeakHashMap 支持空值和空键。该 WeakHashMap 不是 synchronized 的,当然可以使用 Collectioins 的 synchronizedMap 方法来对 该 Map 进行
Java篇 - WeakHashMap的弱键回收机制
昨天刚刚讲解了Java中的引用和引用队列,今天就趁热打铁,讲讲WeakHashMap的弱键回收机制。   目录: WeakHashMap介绍 WeakHashMap例子 WeakHashMap的使用场景 WeakHashMap的数据结构 WeakHashMap的弱键回收     1. WeakHashMap介绍 WeakHashMap继承AbstractMap,实现了Map...
WeakHashMap很有意思的一个Map
以前是真没见过这个Map ,评论下你在哪里见的 ,我在前几天看cglib源码的时候看到,就把它给挖出来了 。。。。。 JavaWeakHashMap到底Weak在哪里,它真的很弱吗?WeakHashMap的适用场景是什么,使用时需要注意些什么?弱引用和强引用对Java GC有什么不同影响?本文将给出清晰而简洁的介绍。 总体介绍 在Java集合框架系列文章的最后,笔者打算介绍<em>一个</em>特...
Java Cache 的HashMap实现, 适用场景及分布式ehcache实例
  cache是老生常谈的事情,这里我想强调一下KISS原则,就是keep it simple and stupid。最近看到很多场景下cache使用的不适当,特别是被过度使用了。<em>一个</em>简单键值存储并不需要复杂的cache方案,好的方案就是用最简单的方法解决<em>问题</em>。简洁是美!   <em>一个</em>标准Cache的主要特征是: 过期时间        容量规划(重要) 清除策略(重要) 命中率统计  ...
WeakHashMap的实现原理
http://blog.csdn.net/zheng0518/article/details/42200113 第1部分 WeakHashMap介绍 WeakHashMap简介     WeakHashMap 继承于AbstractMap,实现了Map接口。     和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value
WeakHashMap 源码分析
一、类图         二、源码分析        a.  WeakHashMap 的 Key 是弱引用的,也就是 Key 放在 map 结构中不阻止对其进行垃圾回收        b.  WeakHashMap 的 Value 是强引用,只有对应的 Key 被回收,才会回收        c.  Value 不应直接或间接引用 Key,否则会阻止对 Key 的回收,一种处理方法是插入...
《Java源码分析》:WeakHashMap
《Java源码分析》:WeakHashMap这篇博文就来看下WeakHashMap这个类的源码。博文的思路也是从继承结构、构造方法、常见的方法这些方面来分析WeakHashMap这个类的源码。说明:WeakHashMap也是<em>一个</em>“数组和链表”的结合体1、WeakHashMap的继承结构 public class WeakHashMap extends Abstract
关于SoftHashMap实现相关内容
前言 在看这篇文章时,看到了里面使用了SoftHashMap类。这个类是Shiro框架中的<em>一个</em>类,博主把这个类拿过来后,又添加了<em>一个</em>新的方法来方便使用。 在看到这个类后,想了<em>一个</em><em>问题</em>:会不会发生GC的时候,SoftHashMap里的Value被回收了,而Key还存在的<em>问题</em>呢?如果会发生这样的<em>问题</em>的话,我们就无法用Key来判断缓存是否存在了。下面我们看一下它是如何处理的。
WeakHashMap源码分析
本文对WeakHashMap的源码进行了详细的分析,及WeakHashMap的应用场景,关键核心代码实现分析
用弱引用堵住内存泄漏(附原版)
引用链接:http://www.ibm.com/developerworks/cn/java/j-jtp11225/ 虽然用 Java™ 语言编写的程序在理论上是不会出现“内存泄漏”的,但是有时对象在不再作为程序的逻辑状态的一部分之后仍然不被垃圾收集。 要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是
Java类集框架——Map接口(Map.Entry接口 Map常用子类HashMap、Hashtable、TreeMap、WeakHashMap)的使用
学习目标 掌握Map接口与Collection接口的不同。 掌握Map与Map.Entry接口的关系。 掌握Map接口常用的子类:HashMap、Hashtable、TreeMap、WeakHashMap。 掌握HashMap与Hashtable的区别。 Collection的操作中每次保存的对象都是<em>一个</em>对象,但是在Map集合中保存的是一对对象,对象的形式是以:key—>valu
Effective Java 读书笔记(六):消除过期的引用对象
术语: 过期引用(obsolete reference):指永远不会再被解除的引用。        在像JAVA这种具有垃圾回收功能的语言中也不是程序员完全不用考虑垃圾回收的<em>问题</em>,考虑下面的例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
强弱软虚引用 weakHashMap
强引用 这是最常见的引用关系,变量o对 new object()这个对象(下称对象xx)的进行引用,o持有对象的强引用,宁愿内存溢出也不清除强引用的内存 Object obj = new Object();//o 持有这个新new出来对象xx的强引用 //不需要之后 将obj置为null,这样对象xx就没有引用了,变为不可达,会在下次gc的时候回收掉 obj = null;//help GC ...
HashMap解决冲突(简单)
之前也写过这篇文,见Java 8中HashMap和LinkedHashMap如何解决冲突 在java8之前,HashMap等其他基于Map类都是用链地址法解决冲突,它们使用单向链表来存储相同索引值的元素,最坏的情况下,这种方法会使得HashMap的get方法的性能从O(1)降低到O(n)。 为了提高性能,java8中使用平衡树来替代链表存储冲突的元素,那么最坏的性能从O(n)提高到O(logn)。...
Java弱引用与WeakHashMap(转)
在《Effective Java 2nd Edition》中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的<em>问题</em>,例如的对象池、缓存中的过期对象都有可能引发内存泄露的<em>问题</em>。书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一<em>问题</em>。之前也确实遇到过类似<em>问题</em>,但是没有接触过“弱引用”相关的<em>问题</em>,于是查阅了一些资料。  
Java集合之五—WeakHashMap
WeakHashMap是<em>一个</em>基于Map接口实现的散列表,实现细节与HashMap类似(都有负载因子、散列函数等等,但没有HashMap那么多优化手段),它的特殊之处在于每个key都是<em>一个</em>弱引用。 首先我们要明白什么是弱引用,Java将引用分为四类(从JDK1.2开始),强度依次逐渐减弱: 强引用: 就是平常使用的普通引用对象,例如Object obj = new Object(),这就是一...
集合框架map学习笔记-WeakHashMap
Map:  1、HashMap  2、LinkedHashMap  3、IdentityHashMap  4、WeakHashMap  5、TreeMap  6、EnumMap  7、ConcurrentHashMap  8、ConcurrentSkipListMap  今天主要学习的是WeakHashMap。 1
来自企业中的真实面试真题(二)
1. 在Java中,负责对字节代码解释执行的是     A. 应用服务器 B. 虚拟机 C. 垃圾回收器 D. 编译器   2. <em>一个</em>栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈得输出序列的是( )    A. 5 4 1 3 2 B. 2 3 4 1 5 C. 1 5 4 3 2 D. 2 3 1 4 5 3. LDA
Java-Collection源码分析(九)——WeakHashMap
WeakHashMap 继承于AbstractMap,实现了Map接口。和HashMap一样,WeakHashMap也是<em>一个</em>哈希表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 WeakHashMap中的每个关键对象间接存储为弱引用的引用。因此,只有在地图的内部和外部的弱引用之后,密钥才会被垃圾回收器清除。 一、WeakHashMap的垃圾回收机制 1.1
【集合】深入理解WeakHashmap
(一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于<em>一个</em>给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除 2. WeakHashMap 类的行为部分取决于垃圾回收
java的WeakHashMap详细介绍
在上一篇文章中介绍了Java的四种对象引用,这篇文章介绍<em>一个</em>java中相关的具体应用WeakHashMap。       WeakHashMap是基于弱引用实现的哈希表,与HashMap在操作上基本相同,WeakHashMap最大的特点是对于哈希表中的每个Key,如果除了自身对Key有引用外,此Key没有其他引用,那么该Key对应的键值对会被表自动移除,这个行为取决于垃圾回收器的动作,只有在垃圾
【转载】 深入理解WeakHashmap
转载出处WeakHashmap(一) 查看API文档,WeakHashmap要点如下: 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于<em>一个</em>给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除 WeakHashMap 类的行为部分取决于垃圾
WeakHashMap的详细理解
WeakHashMap 继承于AbstractMap,实现了Map接口。    和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。   不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于<em>一个</em>给定的键,其映...
WeakHashMap原理解读
WeakHashMap如何实现在GC进行垃圾回收时,删除key-value键值对。 WeakHashMap中Entry定义如下,继承了WeakReference class Entry extends WeakReference implements Map.Entry{      Entry(K key, V value,            Refe
关于WeakHashMap机制的疑惑
最近想对一些频繁访问且实时性不敏感的数据进行<em>一个</em>缓存,原本是想用HashMap做的,后来发现有个叫WeakHashMap的东西,看介绍貌似更适合我这个场景,我希望达到的是这样的效果:rn需要取数据时向缓存管理器请求,当缓存管理器在缓存(HashMap或者WeakHashMap)中没有取到数据则从数据库读取数据放入缓存然后返回该数据。[b]然而,保存在缓存中的数据仍然接受GC的管理,即它可以被GC清除。[/b]rnrn但是我在网上查到的资料,对于WeakHashMap的实现方式有两种说法,不知道哪种才是对的:rn一、WeakHashMap中有expungeStaleEntries方法,在进行一些特定操作的时候,它会自动调用该方法,清除没被引用的数据。(我查看过它的源代码,确实调用了该方法,但是主要是看不懂这个方法里面做了什么)rn二、WeakHashMap里面使用的是弱引用,允许被GC清除。(可是我在源代码里面没有看到弱引用相关的代码啊)rnrn我想,如果是后者,我的目的可能就可以实现了。我的目的就是说,我只管往里面放数据,不管清除,当GC发生时会自动将不需要的数据清除。这里有<em>一个</em>重要的点:[b]并不是该对象一失去引用就立即[/b](或在下次调用时立即)[b]被清除[/b],(这样的话缓存就没有任何意义了)[b],而是内存不足时就像弱引用一样被GC清除[/b](GC的发生是程序无法预测的)
WeakHashMap的一点理解
本文的大部分参考自下面这篇blog:http://hongjiang.info/java-referencequeue/ 先上图: WeakHashMap的实现是通过ReferenceQueue这个“监听器”来优雅的实现自动删除那些引用不可达的key的。 先看看ReferenceQueue在Java中的描述: Reference queues, to which reg
WeakHashMap类源码解析
WeakHashMap特点 1.内部通过数组实现,和HashMap很类似 2.地址冲突通过链表实现,和HashMap一样 2.当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值 相关包package java.util; import java.lang.ref.WeakReference; import java.lang.ref.ReferenceQueue;继
java集合框架系列---WeakHashMap
1、介绍WeakHashMap简介 WeakHashMap 继承于AbstractMap,实现了Map接口。 和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确
Java集合框架:WeakHashMap
&amp;amp;emsp;&amp;amp;emsp;WeakHashMap实现了Map接口,是HashMap的一种实现,它比HashMap多了<em>一个</em>引用队列: ``` private final ReferenceQueue&amp;lt;Object&amp;gt; queue = new ReferenceQueue&amp;lt;&amp;gt;(); ``` &amp;amp;emsp;&amp;amp;emsp;博主认真比对过WeakHashMap和HashMap的源码,发现WeakHa
浅析HashMap与WeakHashMap的区别
也就是说,当持有<em>一个</em>对象的弱引用并不会阻止这个对象被回收。针对这一点我们通过源码来看下HashMap与WeakHashMap的区别。
Java集合源码分析-WeakHashMap
这是分析Java的map类集合的最后一篇文章了,写完这一篇打算分析java.util.concurrent包下的并发集合源码。 《淮南子•缪称训》:“欲知天道,察其数;欲行地道,物其树;欲知人道,从其欲”,所以想要清楚WeakHashMap的底层原理,首先要知道WeakHashMap上层应用的具体表现,如果都不知道WeakHashMap的上层表现,探究其实...
基础数据机构之WeakHashMap源码分析
1.WeakHashMap 在HashMap实现上,在HashMap上增加Entry的SoftReference软引用功能   源码分析   Entry实体类继承WeakReference /** * The entries in this hash table extend WeakReference, using its main ref * field as
WeakHashMap源码解析
在Java中很多开源框架都使用了WeakHashMap,它里面存储的key,value会随时间的推移慢慢减少(在 WeakHashMap 中,当某个“弱键”被回收后,WeakHashMap会将对应的Entry移除。更精确地说,对于<em>一个</em>给定的key,其映射的存在并不阻止垃圾回收器对该键的回收。某个key被回收时,它对应的键值对随后也会从映射中被移除。“弱键”的实现和清除,是通过WeakReferen
求救:关于WeakHashMap的困惑
package statictest;rnimport java.util.*;rnclass Arn rn int a=3;rn String str="hello";rn rn public String toString() rn rn return str+String.valueOf(a);rn rnrnrnpublic class StaticTestrnrn public static void main(String[] args) throws Exceptionrn rn Map map=new WeakHashMap(); rn String a="a";rn String av="av";rn A ca=new A();rn map.put("ca", ca);rn map.put(a, av); rn System.out.println(map); rn System.gc(); rn a=null;rn ca=null; rn Thread.sleep(1000);rn System.gc(); rn System.gc(); rn System.out.println(map);rn rn /*运行结果:rn a=av, ca=hello3rn a=av, ca=hello3rn 两次一样*/rn rn Map map2=new WeakHashMap();rn map2.put("obj", new A());rn A xyz=(A)map2.get("obj");rn System.out.println(map2);rn xyz.a=10000;rn System.out.println(map2);rn /*运行结果:rn obj=hello3rn obj=hello10000rn 对象的成员变量可改变*/ rn rnrnrnrn疑惑1:rn为什么我把WeakHashMap的键设为了null,而且也调用了垃圾回收器,也让主线程休眠了一段时间,可是这个map还是不放掉这一对值?rn疑惑2:rnmap里的值存的一律是引用,可是为什么我将第<em>一个</em>map的键ca对应的值设为了null,可是它打印出来还是原来的值?而第二个map2里面我更改了它里面保存对象的成员值后,能反应出正确的结果?rn
JAVA基础(七)WeakHashMap
WeakHashMapWeakHashMap概述简单科普JVM中的引用强引用软引用弱引用虚引用WeakHashMap的数据结构源码分析属性clear()expungeStaleEntries()hash()resize()总结 WeakHashMap 概述 WeakHashMap和HashMap一样是<em>一个</em>散列表,并且键值都可以为null(key只能有<em>一个</em>null),它也同样有扩容机制,数据结构也基...
WeakHashMap的简述3(简单使用)
WeakHashMap的使用   控制台输出结果: 万水千山总是情,点个关注行不行  
Java弱引用与WeakHashMap的介绍
在《Effective Java 2nd Edition》中,第6条“消除过期的对象引用”提到,虽然Java有垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的<em>问题</em>,例如的对象池、缓存中的过期对象都有可能引发内存泄露的<em>问题</em>。书中还提到可以用WeakHashMap来作为缓存的容器可以有效解决这一<em>问题</em>。之前也确实遇到过类似<em>问题</em>,但是没有接触过“弱引用”相关的<em>问题</em>,于是查阅了一些资料。
JDK1.8源码解读之WeakHashMap解读
WeakHashMap     继承:AbstractMap     实现:Map     1、key value皆可以为null     2、非线程安全的,线程安全可以使用Collections#synchronizedMap方式获得     3、本Map中被Weak的是key,value还是强引用的,在实现的源码中,调用get resize getTable方式时候通过expungeStale...
深入理解WeakHashmap
WeakHashmap (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于<em>一个</em>给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除 2. WeakHashMa
java 弱引用集合类WeakHashMap
java 弱引用集合类WeakHashMap Java集合框架中的WeakHashMap类是Map接口的一种特殊实现。它实现了Map接口,继承了AbstractMap抽象类。它实现了对key的弱引用。如果除了WeakHasMap对象本身对key的引用除外,在没有其它引用指向key,此WeakHashMap对象将丢弃此key-value对。我们来看<em>一个</em>例子:
深入理解WeakHashmap
深入理解WeakHashmap WeakHashmap (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于<em>一个</em>给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键
对内存敏感的WeakHashMap
WeakHashMap是map的一种实现,它采用弱引用作为内部存储方案,一旦内存不够时, GC回收未被引用的表项,从而避免系统内存溢出,它可以作为简单的缓存方案。 注意:当引用的key为强引用时退化为HashMap,表项无法自动清理。 import java.util.Map; import java.util.WeakHashMap; /** * 对WeakHashMap测试
WeakHashMap基础使用
WeakHashMap的基础使用与HashMap类似,详细可以参考另一篇文章点击这里。但是区别在于WeakHashMap对key保留了弱引用,而HashMap对key保留了强引用(对于强弱引用可以参考这篇文章点击这里),所以只要HashMap在则key就一直在,而WeakHashMap中的key则可能会被垃圾回收: public class Main { public static v...
弱散列映射表:WeakHashMap
啊啊啊 其实和WeakHashMap无关吧大概 先说说实现原理(大概 弱散列表内部通过弱引用来配合垃圾回收器回收不可达的对象,当键持有的对象只被弱引用引用时(◎﹏◎),GC将她回收 那么<em>问题</em>来了,当这个对象长时间不使用时,可不可以将她的属性保存在某个地方(类似序列化)并回收本体呢?即Key存在,value为null 当访问到这个对象的Key时,Key可不可在从某个地方
WeakHashMap实现原理及源码分析
和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。这个“弱键”的原理大致上就是,通过WeakReference和ReferenceQueue实现的。 WeakHashM
Java集合之WeakHashMap详解
WeakHashMap是一种特殊的HashMap,那它特殊在哪里呢?WeakHashMap的键是弱引用对象,弱引用是实现WeakHashMap的关键所在,WeakHashMap特别适用于需要缓存的场景,当<em>一个</em>键对象被垃圾回收器回收时,那么相应的值对象的引用会从Map中删除。WeakHashMap能够节约存储空间,可用来缓存那些非必须存在的数据。由于WeakHashMap的键值是弱引用对象,所以,即...
深入学习WeakHashMap
这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap
《java源码分析系列(9)》WeakHashMap
《Java源码分析》:WeakHashMap这篇博文就来看下WeakHashMap这个类的源码。博文的思路也是从继承结构、构造方法、常见的方法这些方面来分析WeakHashMap这个类的源码。说明:WeakHashMap也是<em>一个</em>“数组和链表”的结合体1、WeakHashMap的继承结构 public class WeakHashMap&amp;lt;K,V&amp;gt; extends A...
转:: 深入理解WeakHashmap
标签:SoftReference WeakReference WeakHashmap finilize http://mikewang.blog.51cto.com/3826268/880775 WeakHashmap (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。
WeakHashMap相关(转)
本文将深入地介绍关于引用对象(Reference Objects)的知识。基本上说,引用对象提供了一种对象间接引用所需内存的方式,这些引用对象保存在<em>一个</em>引用对象中(类ReferenceQuene),它监视这些引用对象使得其可以访问。基于这种类型的引用对象,垃圾回收器能够释放内存,
深入理解WeakHashMap
http://mikewang.blog.51cto.com/3826268/880775
各种集合的总结
总结了集合中常用的一点点,希望可以共享 List:LinkedList,ArrayList,Vector(Stack),Set Map:Hashtable,HashMap,WeakHashMap
WeakHashMap的remove方法导致对象回收的测试
定义<em>一个</em>类,在finalize方法中添加log public class Test{         int value;         public Test() {             // TODO Auto-generated constructor stub         }         public Test(int i) {
java集合框架系列-WeakHashMap介绍
转载http://www.cnblogs.com/skywang12345/p/3323085.htmlWeakHashMap简介WeakHashMap 继承于AbstractMap,实现了Map接口。 和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 不过WeakHashMap的键是“弱键
Java中的WeakHashMap实现分析
在Java集合中有一种特殊的Map类型:WeakHashMap。 WeakHashMap 继承于AbstractMap,实现了Map接口。 和HashMap一样,WeakHashMap 也是<em>一个</em>散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 不过WeakHashMap的键是“弱键”,里面存放了键对象的弱引用,当某个键不再正常使用时,会从WeakHashMap中
Java中WeakHashMap实现原理深究
一、前言   我发现Java很多开源框架都使用了WeakHashMap,刚开始没怎么去注意,只知道它里面存储的值会随时间的推移慢慢减少(在 WeakHashMap 中,当某个“弱键”不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于<em>一个</em>给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从
WeakHashMap和Java引用类型详细解析
WeakHashMap是种弱引用的HashMap,这是说,WeakHashMap里的key值如果没有外部强引用,在垃圾回收之后,WeakHashMap的对应内容也会被移除掉。 1.1 Java的引用类型 在讲解WeakHashMap之前,我们需要了解Java中引用的相关类: ReferenceQueue,引用队列,与某个引用类绑定,当引用死亡后,会进入这个队列。 HardReference...
猫头鹰的深夜翻译:Java WeakHashMap
本文简介 WeakHashMap类概览 WeakHashMap类构造器总结 WeakHashMap类构造方法 WeakHasjMap类使用举例 1. WeakHashMap类概览 WeakHashMap是<em>一个</em>实现了Map接口,并且键为weak型的哈希表。WeakHashMap中的条目不再被正常使用时,会被自动删除。它的键值均支...
引用及应用(Reference\WeakHashMap)十六
/**杂:学习资料来自网络或书籍 * 引用的四大类型:强、软、弱、虚 * 1)强引用:StrongReference,引用指向对象,gc(Garbage collection)运行时 * 不回收。 * 2)软引用:SoftReference gc运行时可能回收(jvm内存不够) * 3)弱引用:WeakReference gc运行时立即回收 * 4)虚引用:PhantomReference 类似于无引用,主要跟踪对象被回收的状态,不能单独使用, * 必须与引用队列(ReferenceQu
Java中的WeakHashMap与类示例
在本文中,我们将WeakHashMap 通过示例从java.util包中学习  类。 我们将学到什么? WeakHashMap 课程概述 WeakHashMap 类构造方法摘要 WeakHashMap 类构造方法 WeakHashMap 类示例 1. WeakHashMap类概述 WeakHashMap 是<em>一个</em>基于Hash表的Map接口实现的弱键。当其密钥不再正常使用时,将自动删除该条...
初学Java,WeakHashMap实现类(三十二)
WeakHashMap这个类,说真的,我不知道Java为什么弄这么<em>一个</em>集合类出来,反正C#里面找不到类似的实现,不知道它是用在什么场景下的看它的名字就知道,WeakHashMap的每<em>一个</em>key对象保存了实际对象的弱引用,当系统回收了该key所对应的实际对象之后,WeakHashMap会自动删除该key对应的key-value对下面做个实验import java.util.*; public cla
VS下生成与配置静态库与动态库(一)
此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。 本文仅供初学者参考,如果有<em>问题</em>欢迎大家指正。        首先简单地理解一下静态库与动态库,以及两者的区别。 静态库(*.lib): 将*.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的<em>一个</em>二进制文件; 动态库(*.lib+*.dll):
Putty Connection Manager(PuttyCM)下载
Putty Connection Manager 0.7 alpha 多标签putty 相关下载链接:[url=//download.csdn.net/download/dccmx/1921195?utm_source=bbsseo]//download.csdn.net/download/dccmx/1921195?utm_source=bbsseo[/url]
ASP+SQL Server 2000 网络书店系统的开发下载
整个系统采用ASP+SQL Server 2000。ASP(Active Server Page)技术是目前流行的开发动态网站的技术,具备许多同类网页制作技术难以比拟的优秀品质。 相关下载链接:[url=//download.csdn.net/download/xinsheng8888/2112418?utm_source=bbsseo]//download.csdn.net/download/xinsheng8888/2112418?utm_source=bbsseo[/url]
计算机组成原理题库-选择题下载
计算机组成原理题库-选择题 针对今年常考试题题型! 相关下载链接:[url=//download.csdn.net/download/mamak135/2180990?utm_source=bbsseo]//download.csdn.net/download/mamak135/2180990?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 大数据专业教育的问题
我们是很有底线的