在JVM中long和double型变量都是占用8个字节空间存储的, 而在读写时,是以4字节为单位操作的; 也就是要写入一个long型数据, 需要分别写入高位和低位, 共2次完成....因为每次读写都是2次操作,相对AtomicInteger而言效率是较低的....LongAdder
JDK8中, 为优化AtomicLong在高并发下的低效问题, 引入了一个新的Long型原子操作类LongAdder, 它比AtomicLong拥有更好的性能, 当然代价就是消耗更多的空间...处理部分;
cells[]: 是在有线程竞争时, 数据的处理部分;
有无线程竞争的判断依据就是在对base进行CAS操作时是否成功....(a = as[getProbe() & m]) == null
综上, 采用了分治的思想, 数据操作由原来1个位置, 分散到了base和cells[]数组的多个位置, 降低了数据锁的概率, 提高了运算效率