数据结构学的烂,看这个类比较的吃力

PoolChunk主要使用long allocate(int normCapacity) 在buffer pool中分配buffer。这个类有几个重要的概念:page:是chunk中内存分配的最小单元,chunk:表示一系列的page, 一个chunk的大小chunksize=2{maxorder}*pageSize。

首先需要分配一个长度等于chunksize的字节数组,当需要从中分配一个bytebuf时,返回一个第一个有足够空间满足这个bytebuf大小的位置。然后标记这块缓冲不可再分配了,除非该bytebuf释放。

为了在chunk中搜索满足大小的内存快的偏移,我们需要构造一个完全满二叉树,该二叉树使用byte[]存储-memoryMap,该二叉树的深度为maxOrder+1,从0开始计数,

0                                           1

1                                    2                  3

2                                4       5         6       7

3                            8    9 10  11 12  13  14 15

maxOrder

这个满二叉树,每个叶子结点标识一个page的使用状态,根结点就标识整个chunk的使用状态。 二叉树的length为2{maxorder+1}*pageSize.  [0]不存储值

在chunk中分配算法如下,如果要分配一个chunksize/2{k},我们将从第k层从左到到右中寻找未使用的节点。

memoryMap[id]=depth_of_id   =>没有使用

memoryMap[id]>depth_of_id   =>他的子结点被分配了,该结点不能分配,但是他的子结点还可以被分配。

memoryMap[id]=maxorder+1   =>子结点完全分配完了

allocateNode(d)的算法如下:

1:从root结点开始(depth=0或者id=1)

2: 如果memoryMap[1]>d 该chunk无缓冲非陪

3:如果左结点的值<=h,我们从左子树开始一直向左移动

4:否则试下右子树

最新文章

  1. 可爱的Python_课后习题_CDay0 时刻准备着!发布
  2. 剑指offer:赋值运算符函数和复制构造函数
  3. java语言实现堆排序
  4. Robot Framework-Mac版本安装
  5. UIView简单动画
  6. A planning attack on a commuter train carriage in Taipei
  7. POJ 2886Who Gets the Most Candies?(线段树)
  8. file_operations结构体解析 1
  9. 在浏览器中使用jquery取得iframe中页面中指定元素的值的不同
  10. 深度学习框架Caffe的编译安装
  11. js按值传递和按引用传递
  12. LeetCode 102 二叉树的层次遍历
  13. 微信小程序 image属性 mode
  14. 基于VMware Workstation在Windows Server 2008 R2上搭建SQL Server 2012高可用性组(AlwaysOn Group)测试环境(二)
  15. zsh:no matches found 问题解决
  16. fastdfs远程服务器java连接失败的问题
  17. [转]连连看游戏 C#
  18. App升级iOS7体会
  19. [Ctsc2000]冰原探险
  20. java中绘图-----那个鼠标等的监听我还是不太会,,好苦恼啊。不知道这些监听事件是怎么区分的

热门文章

  1. http请求 详解
  2. 骨骼动画 cocos2d-x + cocoStudio &lt;cocos2d-x : version 2.2.0&gt;
  3. RedHat 6.8 打开vga之后Login界面花屏
  4. 洛谷 P3223 [HNOI2012]排队
  5. 修改分区后的 Grub rescue
  6. Hive的JDBC访问
  7. 异常:java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlType
  8. 前用户sudo免密码
  9. 聊聊WPF中字体的设置
  10. C# 保护进程不被结束(源代码)防任务管理器结束进程