JDK源码
micat707
这个作者很懒,什么都没留下…
展开
-
HashMap之环形链表
在多线程操作HashMap的情况中,可能会导致环形链表的产生。而环形链表产生后,会在后续遍历时出现死循环,导致CPU过高的情况。 以下简单描述下导致环形链表发生的情形。 假设之前链表中的数据为e1->e2->null,扩容后也在同一链表中(比如key为null与key为””的数据就在同一链表中,index为0)。 transfer代码如下: 线程一:执行593行的next=...原创 2019-01-14 10:36:40 · 1257 阅读 · 1 评论 -
ConcurrentHashMap之segment[j]的地址偏移计算
在ConcurrentHashMap中,通过Unsafe类的cas操作来设置或获取segment[j]的值。代码如下: 而SBASE取值为: UNSAFE.arrayBaseOffset用来获取数组第一个元素的偏移地址。通过该偏移地址可以获取或设置数组的第一个元素。 SSHIFT取值为: UNSAFE.arrayIndexScale用来计算一个数组元素的引用占的字节数,32位为...原创 2019-01-14 18:10:27 · 347 阅读 · 0 评论