在调用arena_malloc_small过程中,要根据申请内存大小,进行对齐计算,然后分配一个整块儿.算法如下: 1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_size2bin与arena_bin_info数组: 2)根据small_size2bin查找当前申请内存块大小的对齐后的分组位置,再根据该位置到arena_bin_info数组查找对应补齐后的分配真实内存大小: 例子:需要申请a=1234字节大小的内存 1)以8个字节分组取整,a/8或a>>3获得sm…
一.5种malloc方法 1)tcache_alloc_small 2)arena_malloc_small 3)tcache_alloc_large 4)arena_malloc_large 5)huge_malloc //written in jemalloc_internal.h file imalloct(size_t size, bool try_tcache, arena_t *arena) { assert(size != ); if (size <= arena_maxclass…
在arena_s结构中,由NBINS数组将bin按照不同规模等级分别存储,每一个等级对应一颗run树,即一颗以chunk_map_t为节点的红黑树,而这些chunk_map_t节点实际分布于各个chunk的chunk_map_t数组中(每个chunk缺省为4M大小),由于chunk其实地址是chunksize对齐的,所以可以由当前chunk_map_t节点地址求得chunk的开始地址(CHUNK_ADDR2BASE),同时,每个chunk_map_t对应该chunk中的一个page,顺序也保持一…
Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config.xml 以及 mapper.xml 中的所有信息 都可以在 Configuration 对象中获取到.所以一般情况下,Configuration 对象只会存在一个.通过上篇文章我们知道了mybatis-config.xml 和 mapper.xml 分别是通过 XMLConfigBuilder 和…
目录 AQS的源码分析 该篇主要分析AQS的ConditionObject,是AQS的内部类,实现等待通知机制. 1.条件队列 条件队列与AQS中的同步队列有所不同,结构图如下: 两者区别: 1.链表结构不同,条件队列是单向链表,同步队列是双向链表. 2.两个队列中等待条件不同,条件队列中线程是已经获取到锁,主动调用await方法释放锁,挂起当前线程,等待某个条件(如IO,mq消息等),同步队列中的线程是等待获取锁,在获取锁失败后挂起等待锁可用. 两者联系: 当等待的某个条件完成,其他线程调用s…
4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里好奇,才开始分析如何交互的,这样避免了思维的跳跃性) 既然我们想从这里入手,那么还是以controller的请求入手,因为请求是从这里发出去的,那么肯定入口就存在于AbstractDraweeController.submitRequest()方法,上源码: 在刚刚查看源码时,我们并没有提及到get…
Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Channel 注册到 NioEventLoop chnnel 初始化完成后就需要将其注册到对应的 NioEventLoop 上. (1) NioEventLoopGroup 注册 // NioEventLoopGroup -> MultithreadEventLoopGroup public C…
框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftthen/p/5208169.html http://www.cnblogs.com/leftthen/p/5208376.html http://www.cnblogs.com/leftthen/p/5208404.html HandlerMapping - SimpleUrlHandlerMappi…
Zookeeper 源码(二)序列化组件 Jute 一.序列化组件 Jute 对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在 ZooKeeper 中,使用了Jute 这一序列化组件来进行数据的序列化和反序列化操作.同时,为了实现一个高效的网络通信程序,良好的通信协议设计也是至关重要的.Zookeeper 团队曾想过将 Jute 替换成 Apache 的 Avro 或是 Google 的 protobuf 但是考虑到新老版本序列化组件的兼容性和当前 Jute 的序列化能力并不…
一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表,列表,目录,名单,有种index的意味在里头 编程语言中的List是强调线性,可以简单的视为一个双向串行的集合 List的特色是在结婚的任何位置增加或 删除元素都比较快,本身并不只是随机存取. 同时,List是众多语言中都提供的常用类库之一. java.util.List是一个接口,该接口继承了Co…