hashCode相关性能优化
学习下hashMap中用到的关于hashCode性能优化技巧。作为笔记。为之后并发深入作基础。
1.关于提高性能的hash算法
在被模的位数为2的n次方时,用位与取代效率低下的模运算。位与效率相比模运算效率更高。
例:15%4=3,取代为 15 & 3=1111 & 0011=0011=3
hashmap中在求得某个key后,须要找到在哪个Entry数组下标的运算例如以下:
static int indexFor(int h, int length) {
return h & (length-1);
}
例:
两个key,调用Object的hash方法后值分别为:
32,64,然后entry数组大小为:16,即在调用indexFor时參数分别为[32,15],[64,15],
这时分别对它们调用indexFor方法:
32计算过程:
100000 & 1111 => 000000 =>0
64计算步骤例如以下:
1000000 & 1111 => 000000 =>0
能够看到indexFor在Entry数组大小不是非常大时仅仅会对低位进行与运算操作,高位值不參与运算(假设Entry大小为32,则仅仅会与低5位进行与操作),非常easy发生hash冲突。
这里。32与64这两个hash值。都被存储在Entry数组0的位置上。
为了解决问题。HashMap在做indexFor操作前。须要调用hash方法,使hash值的位值在高低位上尽量分布均匀。hash方法:
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
还是按前面的key,经过Object的hash方法后,分别为32,64来进行运算:
32调用hash运算步骤例如以下:
原始h为32的二进制:
100000
h>>>20:
000000
h>>>12:
000000
接着运算 h^(h>>>20)^(h>>>12):
结果: 100000
然后运算: h^(h>>>7)^(h>>>4),
步骤例如以下:
h>>>7: 000000
h>>>4: 000010
最后运算: h^(h>>>7)^(h>>>4),
结果: 100010,即十进制34
调用indexFor方法:
100010 & 1111 => 2,即存放在Entry数组下标2的位置上
------------------------------------
64的运算结果为:1000100,十进制值为68
调用indexfor方法:
1000100 & 1111 => 4,即存放在Entry数组下标4的位置上
能够看到经过hash方法后,再调用indexFor方法,这样能够降低冲突。
hashCode相关性能优化的更多相关文章
- 复杂TableView在iOS上的性能优化
声明:本文翻译自<iOS performance optimization>,原文作者 Khang Vo.翻译本文纯属为了技术交流的目的,并不具有任何的商业性质,也不得利用本文内容进行商业 ...
- sqlite批量处理数据性能优化
最近设计到sqlite数据库批量操作的,性能很是问题.于是一番研究(站在巨人肩膀)从网上整理出来相关性能优化方向.大体分三个级别,一般第一个阶段已足够. 1.sqlite每次插入数据(每调用一次sql ...
- SQL Server 查询性能优化 相关文章
来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...
- web性能优化——浏览器相关
简介 优化是一个持续的过程.所以尽可能的不要有人为的参与.所以能自动化的或者能从架构.框架级别解决的就最更高级别解决. 这样即能实现面对开发人员是透明的.不响应,又能确保所有资源都是被优化过的. 场景 ...
- MySql性能优化相关
原来使用MySql处理的数据量比较少,小打小闹的,没有关注过性能的问题.最近要处理的数据量飙升,每天至少20W行的新增数据,导致MySql在性能方面已经是差到不可用的地步了,必须要重视MySql的优化 ...
- Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结
转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbas ...
- Web 前端性能优化相关内容解析
Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对 ...
- Web 前端性能优化相关内容解析[转]
Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对 ...
- 网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析
科来 做流量分析,同时也做了一些安全分析(偏APT)——参考其官网:http://www.colasoft.com.cn/cases-and-application/network-security- ...
随机推荐
- JavaWeb学习 (十)————Cookie
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- spring boot整合JMS(ActiveMQ实现)
pom依赖如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...
- VB.NET语法小结
本人精通C#编程,VB没有开发经验,项目维护需要,特意整理了下VB语法,进行恶补.编程思想都是互通的,都是微软生的,语言大同小异. Imports System 一.(1)定义一个变量,并且初始化. ...
- 【easyui】关于easyui Datagrid一些样式记录
此篇文章主要记录在使用datagrid中常见的修改样式方式以及样式效果配图!!!! 一丶存在选中框的时候标题栏合并显示序号字段. 代码展示: onLoadSuccess: function (data ...
- Vue 系列之 渲染与事件处理
渲染相关 列表渲染 与 条件渲染 Vue 中的常见的渲染有 列表渲染 和 条件渲染 所谓条件渲染,则是通过添加一定的逻辑条件来进行 Dom 元素的操作 v-if v-else v-else-if &l ...
- Java集合之Hashtable源码分析
概述 Hashtable也是基于哈希表实现的, 与map相似, 不过Hashtable是线程安全的, Hashtable不允许 key或value为null. 成员变量 Hashtable的数据结构和 ...
- Python 练习:简单的购物车(二)
优化了上一个购物车程序:http://www.cnblogs.com/klvchen/p/8577269.html #输入工资salary = input("Please input you ...
- nativefier(一行代码将任意网页转化为桌面应用)
刚刚在看前端九部的手册的时候,发现一个之前没有用过的骚东西,看上去还挺好用,我这个好奇心瞬间就窜的老高了,赶紧试一试,看看这个东西有没有必要收入我的胯下 结果实验完了之后, 必须必须要强行安利给你们 ...
- js 中判断变量是数组还是对象,和判断对象是否为空
判断是对象还是数组 var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else ...
- Oracle 11gR2_database在Linux下的安装
Oracle 11gR2_database在Linux下的安装 by:授客 QQ:1033553122 由于篇幅问题,采用链接分享的形式,烦请复制以下网址,黏贴到浏览器中打开,下载 http://pa ...