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