ConcurrentHashMap中的2的n次方幂上舍入方法
最近看JDK中的concurrentHashMap类的源码,其中有那么一个函数:
/**
* Returns a power of two table size for the given desired capacity.
* See Hackers Delight, sec 3.2
*/
private static final int tableSizeFor(int c) {
int n = c - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
看不明白这是做什么的,但是后来我查看了《hackers delight》(中译:高效程序的奥秘)这本书,才知道这个函数是用来计算c的上舍入到2的n次幂。书上的函数如下图:

ConcurrentHashMap中的2的n次方幂上舍入方法的更多相关文章
- ConcurrentHashMap中的2的n次方幂上舍入方法(转)
最近看JDK中的concurrentHashMap类的源码,其中有那么一个函数: /** * Returns a power of two table size for the given desir ...
- ConcurrentHashMap中节点数目并发统计的实现原理
前言: 前段时间又看了一遍ConcurrentHashMap的源码,对该并发容器的底层实现原理有了更进一步的了解,本想写一篇关于ConcurrentHashMap的put方法所涉及的初始化以及扩容操作 ...
- ConcurrentHashmap中的size()方法简单解释
本文所有的源码都是基于JDK1.8 ConcurrentHashmap中的size()方法源码: public int size() { long n = sumCount(); return ((n ...
- js 如何判断一个数字是不是2的n次方幂
昨天去面试时,面试官问了一道面试题,说如何判断一个数是不是2的n次方幂,我当时不知道2的n次方幂是什么(糗大发了
- ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义
public V putIfAbsent(@NotNull K key, @NotNull V value) putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候 ...
- js中数组、字符串、日期、数学API方法一览
以下内容摘选自 http://www.w3school.com.cn/jsref/jsref_obj_array.asp 点击方法新窗口打开详解 数组: 方法 描述 concat() 连接两个或更多的 ...
- .Net中的AOP系列之《间接调用——拦截方法》
返回<.Net中的AOP>系列学习总目录 本篇目录 方法拦截 PostSharp方法拦截 Castle DynamicProxy方法拦截 现实案例--数据事务 现实案例--线程 .Net线 ...
- .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点
今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...
- jQuery中设置form表单中action的值的方法
下面介绍在jQuery中设置form表单中action的值的方法. $("#myFormId").attr("action", "userinfo.s ...
随机推荐
- PC-删除共享[绝对够狠的方法]
1.批处理清除法-------------------------------------------------------------------------------------------- ...
- 前端javascript规范文档 (http://www.xuanfengge.com/category/web)
说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...
- SQL Server:OA权限管理设计的实现 下
SQL Server:OA权限管理设计的实现 下 OA系统权限管理设计方案 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. 可以对“组”进行权限 ...
- UISegmetControl
一.UISegmentControl是一个分段控件,父类是UIControl,内涵数个button,并且都有对应下标index: NSArray *titles = @[@"护卫队" ...
- BAPI
MM模块 1. BAPI_MATERIAL_SAVEDATA 创建物料主数据 注意参数EXTENSIONIN的使用,可以创建自定义字段 例如:WA_BAPI_TE_MARA-MATERIAL = IT ...
- Delphi调用java开发的WebService,传入参数出错
http://www.cnblogs.com/zhangzhifeng/p/3397053.html 调用没有参数的服务正常,当调用有参数的服务出现以下错误java.util.concurrent.E ...
- 征服 Nginx + Tomcat【转】
征服 Nginx + Tomcat Server Architecture/Distributed nginxtomcatsessioncluster 2年前一直折腾Apache,现如今更习惯Ngi ...
- Linux--------------安装vsftpd
1.安装vsftpd yum install -y vsftpd yum -y install ftp vsftpd 2.安装vsftpd虚拟用户配置依赖包 ...
- mysq优化参数详解:innodb_buffer_pool_size,innodb_file_per_table
Mysql配置参数: thread_pool:如果支持的话,使用线程池 innodb_buffer_pool_size:物理内存50%-70%最高80%独立实例,多实例:60% innodb_flus ...
- centos6 install mplayer(multimedia)
step_1 http://wiki.centos.org/AdditionalResources/Repositories/RPMForge step_2 http://wiki.centos.or ...