WeakhashMap源码1】的更多相关文章

弱引用(WeakReference)的特性是:当gc线程发现某个对象只有弱引用指向它,那么就会将其销毁并回收内存.WeakReference也会被加入到引用队列queue中. 它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法. 可能发生如下情况: 调用两次size()方法返回不同的值: 两次调用isEmpty()方法,第一次返回false,第二次返回true: 两次调用containsKey()方法,第一次返回…
前面把基于特定数据结构的Map介绍完了,它们分别利用了相应数据结构的特点来实现特殊的目的,像HashMap利用哈希表的快速插入.查找实现O(1)的增删改查,TreeMap则利用了红黑树来保证key的有序性的同时,使得增删改查的时间复杂度为O(log(n)). 今天要介绍的WeakHashMap并没有基于某种特殊的数据结构,它的主要目的是为了优化JVM,使JVM中的垃圾回收器(garbage collector,后面简写为 GC)更智能的回收“无用”的对象. 引用类型 WeakHashMap与其他…
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉,下一次当我们操作map的时候会把对应的Entry整个删除掉,基于这种特性,WeakHashMap特别适用于缓存处理. 继承体系 可见,WeakHashMap没有实现Clone和Serializable接口,所以不具有克隆和序列化的特性. 存储结构 Weak…
1. 简介 本文基于JDK8u111的源码分析WeakHashMap的一些主要方法的实现. 2. 数据结构 就数据结构来说WeakHashMap与HashMap原理差不多,都是拉链法来解决哈希冲突. 下面是WeakHashMap中的Entry结构定义. /** * 省略部分方法实现. */ private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> { V…
WeakHashMap是一种弱引用map,内部的key会存储为弱引用, 当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉, 下一次当我们操作map的时候会把对应的Entry整个删除掉,基于这种特性,WeakHashMap特别适用于缓存处理. //初始化容量 ; //最大容量 << ; //扩容因子 private static final float DEFAULT_LOAD_FACTOR = 0.75f; //内部类 Entry<K,V>[] table;…
public class WeakHashMapIteratorTest { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { Map map = new WeakHashMap1(7); for (int i = 0; i < 3; i++) { map.put("k" + i, "v" + i…
WeakHashMap WeakHashMap 能解决什么问题?什么时候使用 WeakHashMap? 1)WeakHashMap 是基于弱引用键实现 Map 接口的哈希表.当内存紧张,并且键只被 WeakHashMap 使用时,垃圾回收器会按需回收键值对. 2)WeakHashMap 支持 null 键和 null 值. 3)WeakHashMap 是线程不同步的,可以通过 {@link Collections#synchronizedMap Collections.synchronizedM…
概要 这一章,我们对WeakHashMap进行学习.我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap.第1部分 WeakHashMap介绍第2部分 WeakHashMap数据结构第3部分 WeakHashMap源码解析(基于JDK1.6.0_45)第4部分 WeakHashMap遍历方式第5部分 WeakHashMap示例 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPo…
平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它:但是如果我们不是很清楚它的生命周期,这时候就比较麻烦:通常有这样几种处理方式: 由一个线程定时处理,可以是Timer或者ScheduledThreadPoolExecutor: 利用重写LinkedHashMap.removeEldestEntry(),实现 FIFOCache 或者 LRUCache:可以参考我之前写的一篇博客 LinkedHashMap 相关: 利用 WeakH…
概述 WeakHashMap也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-value pair,而且也是非线程安全的.不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是数组+单链表.此外,WeakHashMap与HashMap最大的不同之处在于,WeakHashMap的key是“弱键”(weak keys),即当一个key不再正常使用时,key对应的key-value pair将自动从WeakHashMap中删除,在这种情况下,…