ThreadLocal 清理逻辑
2023-07-14 22:09:14 0 举报
ThreadLocal 清理逻辑
作者其他创作
大纲/内容
是
3
7
4
2
否
槽位 = 4
entry 是否为 null
1
从 staleSlot 的下一个位置开始,向后遍历直到 entry 为 null
清理范围是否为 0
Entry[4]
Entry[]
进行探测式清理 expungeStaleEntry()
0
结束
先清理 staleSlot 位置(置为 null)
清理范围变回 len
不是过期数据,则计算该数据的槽位
10
8
5
6
12
返回最后 entry 为 null 的下标
staleSlot = 2
key 是否为 null
启发式清理 cleanSomeSlots()
key:TL1value:1
将此位置置为 null,size--
先把当前位置的桶置为 null
key:nullvalue:8
Entry[2]
Entry[5]
数据是否在该槽位上
探测式清理 expungeStaleEntry()
查找是否结束
清理范围缩小一半
遇到的 key 是否为 null
重新计算的新下标不在正确的位置,说明之前插入该数据的时候发生了哈希冲突,使得该数据的位置往后移了,所以现在重新计算下标,将数据放在离正确的桶更近一些的位置上。(因为它前面可能已经有数据被清理了,槽位为空了)
再从该槽位开始往后查找空位置,然后放入
key:nullvalue:6
获取下一个位置的下标
0 条评论
下一页