HashMap 与 ConcurrentHashMap
一、概述
二、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相关推荐
- Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的
多选 Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的:答案在文末 A. Hashtable的K ...
- Java7/8 中的 HashMap 和 ConcurrentHashMap
Java7 HashMap 数组+链表 Java7 ConcurrentHashMap Segment数组+HashEntry数组链表+ReenTrantLock分段锁 Java8 HashMa ...
- Java 7:HashMap与ConcurrentHashMap
从我过去有关性能的文章和HashMap案例研究中可能已经看到,Java线程安全性问题可以很轻松地使Java EE应用程序和Java EE容器崩溃. 在对Java EE性能问题进行故障排除时,我观察到的 ...
- HashMap与ConcurrentHashMap的测试报告
日期:2008-9-10 测试平台: CPU:Intel Pentium(R) 4 CPU 3.06G 内存:4G 操作系统:window server 2003 一.HashMap与Concurre ...
- java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析
Java1.5 引入了 java.util.concurrent 包,其中 Collection 类的实现允许在运行过程中修改集合对象.实际上, Java 的集合框架是[迭代器设计模式]的一个很好的实 ...
- HashMap、ConcurrentHashMap原理分析
集合(Collection)是编程中常用的数据结构,而并发也是服务器端编程常用的技术之一,并发总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存 ...
- HashMap与ConcurrentHashMap万字源码分析
HashMap与ConcurrentHashMap`源码解析 JDK版本:1.7 & 1.8 开发中常见的数据结构有三种: 1.数组结构:存储区间连续.内存占用严重.空间复杂度大 优点:因 ...
- Java之HashMap系列--ConcurrentHashMap的原理
原文网址:Java之HashMap系列--ConcurrentHashMap的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java中的ConcurrentHashMap的原理. JDK7与J ...
- Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析
文章目录 HashMap HashMap的存储结构 初始化 put & get put元素 get元素 扩容 遍历Map jdk1.8中的优化 ConcurrentHashMap jdk1.7 ...
- 分析HashTable、HashMap、ConcurrentHashMap的结构、初始化及扩容机制
目录 一.前沿 二.HashTable 三.HashMap Jdk1.7 Jdk1.8 四.ConcurrentHashMap Jdk1.7 Jdk1.8 五.总结 一.前沿 相信很多同学对HashT ...
最新文章
- TNS-01201: Listener cannot find executable /u01/oracle/bin/extproc for SID orcl Listener failed to
- 网页打开共享目录_你会做Excel文件目录吗?真的太太太太太简单了!
- ajax 五种状态,ajax的五种状态
- win10时间和linux不同步时间,ubuntu16和windows10的时间同步问题
- 真正厉害的人,早就戒掉了“贫穷思维”
- python爬京东(带GUI)
- java 获取内存地址_Java 的多态在 JVM 里原来是这样的
- linux目录名乱码,为什么挂载中文目录或文件名是乱码?
- POJ 2182 Lost Cows
- 博客“评论王”评选活动开始啦!
- 聊一聊关于“元宇宙”涉及的前端技术
- 微信修改运动步数卡密源码 每日自助修改
- 高通X12平台XO信号干扰灵敏度的解决方案
- 与班尼特·胡迪一起攻破浮空城 (HZNU-2264)
- 护眼仪眼部按摩器单芯片蓝牙方案开发说明
- 七夕妈妈生辰,岁月,请你善待妈妈
- 4 年 Java 程序员十面阿里终拿下 offer,评级 P6+ 年薪 30-40w 无股票
- 白菜u盘安装linux,使用U盘安装ubuntu 12.04(使用大白菜u盘启动工具)
- Java中char类型的默认值是什么
- 【转】一个女留学生在美国的七年
热门文章
- bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
- java get null_java 获取对象中为null的字段实例代码
- java反序列化异常接不到_由Java对象反序列化异常想到的
- python怎么计算图像梯度_opencv python图像梯度实例详解
- python minimize_Python数学规划案例一
- python百度翻译爬虫_Python爬虫教程-05-python爬虫实现百度翻译
- delay 芯片时序output_【第二章 STA概念 上】静态时序分析圣经翻译计划
- linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
- java绘制流程图_如何才能更好地绘制计算机毕业设计中各种图表
- java 解压到内存,Java GZip 基于内存实现压缩和解压的方法