一、概述

二、HashMap

  1、数据结构

  2、应用

  3、不要用 HashMap 做本地缓存

  一般我们声明 HashMap 时,使用的都是默认的构造方法:HashMap<K, V>,但是它还有另外一个构造方法:HashMap(int initialCapacity, float loadFactor),其中参数 initialCapaticy 为初始容量,loadFactor 为加载因子;如果在默认情况下,一个 HashMap 的容量为 16,加载因子为 0.75,那么阈值就是 12,所以在往 HashMap 中 put 的值到达 12 时,它将自动扩容两倍,如果两个线程同时遇到 HashMap 的大小达到 12 的倍数时,就很可能会出现在将旧的 Entry[] 转移到一个新的 Entry[] 的过程中出现问题,从而导致最终的 HashMap 的值存储异常。

  再分析一下空间效率,拿 HashMap<Long, Long> 举例。在 HashMap<Long, Long> 结构中,只有 Key 和 Value 所存放的两个长整型数据是有效数据,共 16B (2 X 8B)。这两个长整型数据包装成 java.lang.Long 对象之后,就分别具有 8B 的 MarkWord、8B 的 Klass 指针,在加 8B 存储数据的 long 值。在这两个 Long 对象组成 Map.Entry 之后,又多了 16B 的对象头,然后一个 8B 的 next 字段和 4B 的 int 型的 hash 字段,为了对齐,还必须添加 4B 的空白填充,最后还有 HashMap 中对这个 Entry 的 8B 的引用,这样增加两个长整型数字,实际耗费的内存为 (Long(24B)X2) + Entry(32B) + HashMap Ref(8B) = 88B,空间效率为 16B/88B = 18%,实在太低了。

三、ConcurrentHashMap

  1、数据结构

  2、应用

转载于:https://www.cnblogs.com/JavaSubin/p/7751911.html

HashMap 与 ConcurrentHashMap相关推荐

  1. Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的

    多选 Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的:答案在文末 A. Hashtable的K ...

  2. Java7/8 中的 HashMap 和 ConcurrentHashMap

    Java7 HashMap  数组+链表 Java7 ConcurrentHashMap   Segment数组+HashEntry数组链表+ReenTrantLock分段锁 Java8 HashMa ...

  3. Java 7:HashMap与ConcurrentHashMap

    从我过去有关性能的文章和HashMap案例研究中可能已经看到,Java线程安全性问题可以很轻松地使Java EE应用程序和Java EE容器崩溃. 在对Java EE性能问题进行故障排除时,我观察到的 ...

  4. HashMap与ConcurrentHashMap的测试报告

    日期:2008-9-10 测试平台: CPU:Intel Pentium(R) 4 CPU 3.06G 内存:4G 操作系统:window server 2003 一.HashMap与Concurre ...

  5. java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析

    Java1.5 引入了 java.util.concurrent 包,其中 Collection 类的实现允许在运行过程中修改集合对象.实际上, Java 的集合框架是[迭代器设计模式]的一个很好的实 ...

  6. HashMap、ConcurrentHashMap原理分析

    集合(Collection)是编程中常用的数据结构,而并发也是服务器端编程常用的技术之一,并发总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存 ...

  7. HashMap与ConcurrentHashMap万字源码分析

    HashMap与ConcurrentHashMap`源码解析 JDK版本:1.7 & 1.8 ​ 开发中常见的数据结构有三种: 1.数组结构:存储区间连续.内存占用严重.空间复杂度大 优点:因 ...

  8. Java之HashMap系列--ConcurrentHashMap的原理

    原文网址:Java之HashMap系列--ConcurrentHashMap的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java中的ConcurrentHashMap的原理. JDK7与J ...

  9. Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析

    文章目录 HashMap HashMap的存储结构 初始化 put & get put元素 get元素 扩容 遍历Map jdk1.8中的优化 ConcurrentHashMap jdk1.7 ...

  10. 分析HashTable、HashMap、ConcurrentHashMap的结构、初始化及扩容机制

    目录 一.前沿 二.HashTable 三.HashMap Jdk1.7 Jdk1.8 四.ConcurrentHashMap Jdk1.7 Jdk1.8 五.总结 一.前沿 相信很多同学对HashT ...

最新文章

  1. TNS-01201: Listener cannot find executable /u01/oracle/bin/extproc for SID orcl Listener failed to
  2. 网页打开共享目录_你会做Excel文件目录吗?真的太太太太太简单了!
  3. ajax 五种状态,ajax的五种状态
  4. win10时间和linux不同步时间,ubuntu16和windows10的时间同步问题
  5. 真正厉害的人,早就戒掉了“贫穷思维”
  6. python爬京东(带GUI)
  7. java 获取内存地址_Java 的多态在 JVM 里原来是这样的
  8. linux目录名乱码,为什么挂载中文目录或文件名是乱码?
  9. POJ 2182 Lost Cows
  10. 博客“评论王”评选活动开始啦!
  11. 聊一聊关于“元宇宙”涉及的前端技术
  12. 微信修改运动步数卡密源码 每日自助修改
  13. 高通X12平台XO信号干扰灵敏度的解决方案
  14. 与班尼特·胡迪一起攻破浮空城 (HZNU-2264)
  15. 护眼仪眼部按摩器单芯片蓝牙方案开发说明
  16. 七夕妈妈生辰,岁月,请你善待妈妈
  17. 4 年 Java 程序员十面阿里终拿下 offer,评级 P6+ 年薪 30-40w 无股票
  18. 白菜u盘安装linux,使用U盘安装ubuntu 12.04(使用大白菜u盘启动工具)
  19. Java中char类型的默认值是什么
  20. 【转】一个女留学生在美国的七年

热门文章

  1. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
  2. java get null_java 获取对象中为null的字段实例代码
  3. java反序列化异常接不到_由Java对象反序列化异常想到的
  4. python怎么计算图像梯度_opencv python图像梯度实例详解
  5. python minimize_Python数学规划案例一
  6. python百度翻译爬虫_Python爬虫教程-05-python爬虫实现百度翻译
  7. delay 芯片时序output_【第二章 STA概念 上】静态时序分析圣经翻译计划
  8. linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
  9. java绘制流程图_如何才能更好地绘制计算机毕业设计中各种图表
  10. java 解压到内存,Java GZip 基于内存实现压缩和解压的方法