目录
- PoolSubPage.allocate
- getNextAvail方法
- toHandle方法
- removeFromPool方法
PoolSubPage.allocate
上一篇我们介绍了PoolSubPage的简单知识,当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置,具体的源码过程如下:
从源码中我们可以看到具体的主要有三步:
- 获取可分配的段的位置
- 如果subPage已经分配满了则将其从pool中移除
- 将得到的
bitmapIdx
转成handle并返回
下面我们具体分析这三步。
getNextAvail方法
获取下一个可分配的段的位置
这里说下返回的位置int
- 通过上一篇我们知道
bitmap
数组最多为8,那么findNextAvail
方法中的baseVal
最大为7*2的6次方,7(111)占三个位置,左移6个位置后,int的7~9位用于记录所申请的段在bitmap
数组中的第几个元素 - int的0~6位用于记录在long型二进制中的第几位
toHandle方法
将获得的bitmapIdx
转成handle指针
handler其实是一个long型整数,它是一个指针,代表了段的位置的相关信息,long型有64位,每一个位代表的意义如下:
removeFromPool方法
至此,PoolSubPage的内存分配就分析到此。