WeakHashMap学习(一) —— Difference between HashMap and WeakHashMap

WeakHashMap is an implementation of Mapinterface where the memory of the value object can be reclaimed by Grabage Collector if the corresponding key is no longer referred by any section of program. This is different from HashMap where the value object remain in HashMapeven if key is no longer referred We need to explicitly call remove() method on HashMap object to remove the value so that it can be ready to be reclaimed(Provided no other section of program refers to that value object). Calling remove() is an extra overhead.

理解:当WeakHashMap中的value(对象)不在被key(引用,可能是变为空)指向,那么这个value对象就会被删除,而HashMap中这个value对象则会一直被保存,需要调用remove函数来将其进行回收。

Here is a simple program which demonstrate the difference:-

import java.util.HashMap;

import java.util.Map;

import java.util.WeakHashMap;

public class WeakMap {

public static void main(String[] args) {

Map weak = new WeakHashMap();

Map map = new HashMap();

{

    String weakkey = new String("weakkey");

    weak.put(weakkey,new Object());

    String key = new String("key");

    map.put(key, new Object());

    weakkey = null;

    key = null;

}

    System.gc();

}

}

Here we create an instance of WeakHashMap and HashMap, populate one value and finally make key to null.  Program calls System.gc() to run garbage collector. Lets see what is the output after running the garbage collector.

Next two image shows the content of two Maps before running GC:-

First two image shows the content of weak and map instance before the GC is called.  weak reference contains a key “weakkey” and corresponding value. Similarly map contains a key “key” and value. Nothing unusual as such.

Next 2 slides contains the value after GC is called. You can see that there is no entry in weak Map. reason is that as we make weakkey as null the corresponsing value is no longer referred from any part of program and eligible for GC. But in case of map  key and value remain seated present in map.

理解:WeakHashMap中,当我们将弱引用变为空时,相应的value对象就可以被GC掉。

时间: 2024-08-03 18:00:28

WeakHashMap学习(一) —— Difference between HashMap and WeakHashMap的相关文章

Java复习-hashmap和weakhashmap

hashmap的key值和value值是强引用,意味着hashmap对象不被销毁的时候,里面的键值对是不会被销毁的,然而weakhashmap的话,当里面的键值对没有被销毁的时候的话可能被Java回收机制自动销毁 WeakHashMap whm=new WeakHashMap<>(); whm.put(new String("php"), "75元"); whm.put(new String("java"), "90元&qu

java学习笔记——Java中HashMap和TreeMap的区别深入理解

本文转载自Java中HashMap和TreeMap的区别深入理解 首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 

【学习笔记-集合】HashMap 源码浅析

/** * HashMap主要方法解析,jdk1.7版本的HashMap * 一.构造 * 4个构造相对之前的jdk版本功能基本不变,但是代码封装更完善. * 构造前一个参数是容量,相当于数组大小,后一个是负载因子 */ public HashMap(int initialCapacity, float loadFactor) { //当初始容量<0,抛出异常非法的参数容量 if (initialCapacity < 0) throw new IllegalArgumentException(

Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

http://www.cnblogs.com/skywang12345/p/3311126.html 概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126 第1部分 Map概括 (01) Map

WeakHashMap和HashMap的区别

看Java源码的时候,看到了 WeakHashMap ,我一直以来使用的 都是 HashMap,于是查了一下两者的区别 (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map.在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目.更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收.丢弃某个键时,其条目从映射中有效地移除 2. WeakHashMap 类的行为部分取决于

HashMap 、HashTable、TreeMap、WeakHashMap的区别是什么

Java为数据结构中的映射定义了一个接口java.util.Map,它有4个实现类:HashTable.HashMap.TreeMap.WeakHashMap. HashMap和HashTable的区别: 1)HashMap是JDK1.2引进的一个Map接口的实现,HashTable实现Map接口的同时也继承了抽象类Dictionary. 2)HashMap不是线程安全的,HashTable是线程安全的:就效率而言,HashMap可能高于HashTable. 3)HashMap允许空键值(即nu

Java 集合系列13之 WeakHashMap详细介绍(源码解析)和使用示例

概要 这一章,我们对WeakHashMap进行学习.我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap.第1部分 WeakHashMap介绍第2部分 WeakHashMap数据结构第3部分 WeakHashMap源码解析(基于JDK1.6.0_45)第4部分 WeakHashMap遍历方式第5部分 WeakHashMap示例 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPo

WeakHashMap的使用

当我们需要大量使用 WeakReference 的时候,可以考虑使用 WeakHashMap 在执行垃圾回收之前,WeakHashMap 和 普通的 HashMap 没有任何区别,但是一旦 执行垃圾回收,WeakHashMap 中的所有 key-value 对都会被清空. import java. util.WeakHashMap ; class Key{ private String name ; public Key (String name) { super(); this.name =

Java -- WeakHashMap

一.引言 Java中的引用类型由四种情况,强引用.软引用.弱引用.虚引用.关于这些的介绍可以参见鄙人另外一篇博文.                                                                                                                                          http://www.cnblogs.com/plxx/p/4217178.html 二.概述 WeakHas