(JAVA)ConcurrentHashMap initialCapacity 手动计算初始化容量大小过程
package com.lius.test;import java.util.Map; import java.util.concurrent.ConcurrentHashMap;/*** (JAVA)ConcurrentHashMap initialCapacity 手动计算初始化容量大小过程* * 第一步:int cap = ((initialCapacity>=(MAXIMUM_CAPACITY/2))?MAXIMUM_CAPACITY:* initialCapacity+(initialCapacity/2) + 1);* initialCapacity如果大于最大值的一半,cap直接取最大值,否则取initialCapacity+initialCapacity/2再+1的值作为cap变量值* 第二部: cap = (cap-1)|/2|/4|/8|/16|/32; 解释:|/ => [cap/=2; cap|=cap;]* cap先自减1,然后除以2在进行或运算,...除以32再进行或运算,取最终结果* 第三步: cap = (cap<0)?1:(cap>=MAXIMUM_CAPACITY)?MAXIMUM_CAPACITY:cap+1; * 如果cap小于0,cap取1,如果大于最大值,cap就取最大值,如果cap在0与最大值之间,cap就取cap+1* @author lius*/ public class testMap {private static final int MAXIMUM_CAPACITY = 0x40000000;//initialCapacity = 64private Map<String,Object> mapContainer = new ConcurrentHashMap<>(64);//mainProgram Point public static void main(String[] args) {testMap tMap = new testMap();tMap.run(); }private void run() {//initialCapacity = 64int initialCapacity = 64;//MAXIMUM_CAPACITY >>> 1 equals MAXIMUM_CAPACITY/=2;//initialCapacity >>> 1 equals initialCapacity/=2;/*** int cap = ((initialCapacity >= (MAXIMUM_CAPACITY/2)) ?MAXIMUM_CAPACITY :initialCapacity + (initialCapacity/2) + 1);*///int cap = 64+(64/2+1); 97int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?MAXIMUM_CAPACITY :initialCapacity + (initialCapacity >>> 1) + 1);//cap = (cap-1)|/2|/4|/8|/16|/32; cap = tableSizeFor(cap); } // private static final int tableSizeFor(int c) {/*** n = (n-1)|/2|/4|/8|/16|/32; */int n = c - 1;// n = c-1;n |= n >>> 1; // n/=2; 96|48 0b1100000|0b0110000 => 0b1110000 112n |= n >>> 2; // n/=4; 112|28 0b1110000|0b0011100 => 0b1111100 124n |= n >>> 4; // n/=8; 124|31 0b1111100|0b0011111 => 0b1111111 127n |= n >>> 8; // n/=16; 127|7 0b1111111|0b0000111 => 0b1111111 127n |= n >>> 16;// n/=32; 127|3 0b1111111|0b0000011 => 0b1111111 127//n == 127; 127<0?1:(n>=max?max:127+1) => 128return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;//return 128; } }
详细解决方案
(JAVA)ConcurrentHashMap initialCapacity 手动计算初始化容量大小过程
热度:45 发布时间:2024-02-01 15:18:41.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- java 系统单点登录解决方案
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- JAVA WEB导航条,该怎么处理
- java 中Node 有关问题
- 吐了,java Timer 终止不了。
- java web开发解决办法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件
- Hibernate操作数据库 报错java.lang.Integer cannot be cast to java.lang.String如何改
- java struts 文件上载
- java web baidu map开发
- JAVA WEB导航条解决办法
- java 编写ftp上载
- java web中的一个有关问题,困扰小弟我很久了
- java web 与tomcat解决办法
- java web基于j2ee的一些有关问题
- java 内网外网的一个需求,该怎么处理
- jsp 页面 安插ArrayList 报错。为什么,已经加了import="java.util."了呀!
- java dwg 怎样用java把dwg便是aoutcad的格式文件转换成gif,jpg等格式
- 求《Java Web 程序设计与项目实践》解决办法
- java webservice解决方法
- java 与jsp,该怎么解决