netty中的PoolChunk
数据结构学的烂,看这个类比较的吃力
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:否则试下右子树
netty中的PoolChunk的更多相关文章
- Netty 中的内存分配浅析
Netty 出发点作为一款高性能的 RPC 框架必然涉及到频繁的内存分配销毁操作,如果是在堆上分配内存空间将会触发频繁的GC,JDK 在1.4之后提供的 NIO 也已经提供了直接直接分配堆外内存空间的 ...
- Netty 中的内存分配浅析-数据容器
本篇接续前一篇继续讲 Netty 中的内存分配.上一篇 先简单做一下回顾: Netty 为了更高效的管理内存,自己实现了一套内存管理的逻辑,借鉴 jemalloc 的思想实现了一套池化内存管理的思路: ...
- Netty(五)序列化protobuf在netty中的使用
protobuf是google序列化的工具,主要是把数据序列化成二进制的数据来传输用的.它主要优点如下: 1.性能好,效率高: 2.跨语言(java自带的序列化,不能跨语言) protobuf参考文档 ...
- 【转】Netty那点事(二)Netty中的buffer
[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch2-buffer.md 上一篇文章我们概要介绍了Netty的原 ...
- Netty那点事: 概述, Netty中的buffer, Channel与Pipeline
Netty那点事(一)概述 Netty和Mina是Java世界非常知名的通讯框架.它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户ne ...
- Netty中的EventLoop和线程模型
一.前言 在学习了ChannelHandler和ChannelPipeline的有关细节后,接着学习Netty的EventLoop和线程模型. 二.EventLoop和线程模型 2.1. 线程模型 线 ...
- Netty中的连接管理
连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...
- Netty中ByteBuf的引用计数线程安全的实现原理
原文链接 Netty中ByteBuf的引用计数线程安全的实现原理 代码仓库地址 ByteBuf 实现了ReferenceCounted 接口,实现了引用计数接口,该接口的retain(int) 方法为 ...
- Netty中的基本组件及关系
原文:https://blog.csdn.net/summerZBH123/article/details/79344226--------------------- 概述 这篇文章主要是用来 ...
随机推荐
- Zeroc Ice 发布订阅者之demo Icestorm之clock
刚刚在服务端(192.168.0.113)和客户端跑通(192.168.0.188),在这里记录,作为备忘. 第一步:读readme,先用vs2010生成subscriber.exe和publishe ...
- redhat5.8 alt+ctrl+f1 黑屏
/********************************************************************** * redhat5.8 alt+ctrl+f1 黑屏 * ...
- webpack 单页面应用实战
这篇文章将介绍如何利用 webpack 进行单页面应用的开发,算是我在实际开发中的一些心得和体会,在这里给大家做一个分享.webpack 的介绍这里就不多说了,可以直接去官网查看. 关于这个单页面应用 ...
- node.js 笔记(一)
参考:https://github.com/alsotang/node-lessons 感谢!!! 本文属于小白入门级笔记,请大牛自动屏蔽!!! 1. 开发环境 os: 10.12.6 nod ...
- jacksi(比较实用的工具批处理)
批处理类别: 国产软件 批处理语言: 简体中文 授权方式: 免费软件 运行环境: Windows平台 警告:运行BAT源码是一种危险的动作,如果你不熟悉,请不要尝试! 这里分享的是用bat写的比较实用 ...
- c++运行时决定数组大小 variable-length array
本文由Suzzz原创,发布于 http://www.cnblogs.com/Suzzz/p/4117431.html,转载请保留此声明 variable-length array是C99添加的一个特性 ...
- 洛谷P4721 【模板】分治 FFT(分治FFT)
传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_ ...
- (转)list_orderby
本文转载自:http://blog.csdn.net/liyifei21/article/details/6558098 一个条件排序情况 list.OrderBy(item => tem.St ...
- Python:格式化操作符(%)
原文作者:田小计划 原文出处:http://www.cnblogs.com/wilber2013/ (若转载,请标明原文出处) 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整 ...
- Django基础(二)—— models
六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ...