jdk集合相关的位移操作

166 阅读1分钟
  • ForkJoinPool源码阅读的过程中发现了以下代码
  • 该代码出现在第一个任务提交后,初始化池子的WorkQueues
n = 8;// cpu个数
n |= n >>> 1; n |= n >>> 2;  n |= n >>> 4;
n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
  • 第一眼看起来这代码在这突突啥,在纸上画一画这些操作。
  • 最后得出n=32
  • 该算法是得出的结果是2的整数幂

很多集合初始化容量的时候用到了这个算法,比如:HashMap

  • 引申出为什么HashMap的容量必须为2的整数幂