runsAvail
runsAvail
用于记录long型的指针值,是一个LongPriorityQueue数组,LongPriorityQueue的结构如下:
array
数组用于存储handle的值,其中下标对应SizeClasses中pageIdx,size
为array数组的大小,size
的大小取值过程如下:
- chunk的默认大小为4MB,page大小为8kb
- pages为4MB/8KB=512,对应的pageIdx为512
- 故runsAvail的size为32
再看PoolChunk中对runsAvail
的初始化:
我们举个例子来加深理解,如下图:
- 申请的大小为262144(256KB),对应表格中的pageIdx为15的行,则从下标15开始遍历runsAvail数组寻找第一个空闲的long,从分配前的handle情况来看只有下标为30的有空闲的,则向其申请pages为32的空间
- 申请之前runOffset为1,空闲的pages为511(111111111)
- 申请了32个pages之后,空闲的pages为479(511-32),即(111 011111),runOffset则变为33(32+1),即(100001)。
至此,runsAvail
的分析至此完毕。
全文完,如果觉得文章有点意思,不妨点个“赞”或者“在看”吧,您的每一份正反馈都是对三横兰写作的最大肯定,感谢阅读_
每天坚持一点点,每天进步一点点
坚持是日复一日,质变需日积月累
我是三横兰,那个三横的兰