在Netty4中引入了新的内存管理机制极大地提升其性能,本文将对该内在管理机制进行剖析。

这里有篇文章讲述了在推特(Twitter)内部 使用Netty的状况以及Netty4所带来的性能收益。

在分析Netty4的PooledByteBufAllocator之前,我们最好先认识一下jemalloc。 Netty在4.0之前的版本已经尝试过通过优化内存管理的方式来提高性能(如果我没有记错的话),但4.0中的改进则特别 显著。在这个版本中,其内存管理实现主要是参考了jemalloc

jemalloc

jemalloc 是由Jason Evans在FreeBSD项目中引入的,其主旨是为了提升在并发环境下内存的分配效率。说白了就是替代 malloc。malloc之所以没有照顾到并发环境,那是由于在那个时代并发还只在理论,未曾普及。而现在则是多核的天下,连 手机都动则2、4核,甚至于8核了。与jemalloc齐名的还有Google的tcmalloc,其 实现与jemalloc多少也有点相似,这里不做介绍。

jemalloc的理念

我们以买火车票为例,来简单地说明一下jemalloc与malloc的区别。原来的malloc,相当于只有一个售票窗口的售票大厅, 而jemalloc则在同一个售票大厅里面适量地增加的窗口。当然,火车票的总量(即内存大小)是不变的,买票的人相当于线程了。 说起来这也是很自然的事情的。

在这里,一个售票窗口就是相当于一个Arena

Arena则按页(Page)来的管理内存,也就是说,一张车票就相当于一页。(后面就不太适合用火车票的例子了)。

同时,jemalloc还根据所请求的内存大小,对其进行分类。如下图:

默认情况下,Page的大小为4KB。如图,有三类,small、large和huge。small类的内存请求都属于一个内存页之内 (没有半张车票出售:()。另外,在small类里面,又分了三个子类,分别是Tiny、Quantum-Spaced和Sub-page。 这几个概念都在Netty中得到应用。

全文......

Netty4 中的内存管理的更多相关文章

  1. Unity游戏开发中的内存管理_资料

    内存是手游的硬伤——Unity游戏Mono内存管理及泄漏http://wetest.qq.com/lab/view/135.html 深入浅出再谈Unity内存泄漏http://wetest.qq.c ...

  2. C++中的内存管理

    在C++中也是少不了对内存的管理,在C++中只要有new的地方,在写代码的时候都要想着delete. new分配的时堆内存,在函数结束的时候不会自动释放,如果不delete我分配的堆内存,则会造成内存 ...

  3. cocos2dx中的内存管理机制及引用计数

    1.内存管理的两大策略: 谁申请,谁释放原则(类似于,谁污染了内存,最后由谁来清理内存)--------->适用于过程性函数 引用计数原则(创建时,引用数为1,每引用一次,计数加1,调用结束时, ...

  4. Cocos2d-x开发中C++内存管理

    由于开始并没有介绍C++语言,C++的内存管理当然也没进行任何的说明,为了掌握Cocos2d-x中的内存管理机制,是有必要先了解一些C++内存管理的知识.C++内存管理非常复杂,如果完全地系统地介绍可 ...

  5. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作

     一  QT的内存管理 1  QT中的内存管理是QObject来管理的 2  QT中的内存管理没有cocos2dx中的引用计数 3  组件能够指定父对象 QTimer *timer = QTime ...

  6. C语言中的内存管理

    开始陆续的发一下唐老师视频的笔记吧,顺便带一些正冲哥书的的内容.不能一下都发出来,因为内容发多了自己也受不了,而且发的都是学习视频时候的一些笔记,可能会有一些问题不是很清晰. 先说一下C语言中的内存管 ...

  7. JNI中的内存管理(转)

    源:JNI中的内存管理 JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互 ...

  8. javascript中的内存管理和垃圾回收

    前面的话 不管什么程序语言,内存生命周期基本是一致的:首先,分配需要的内存:然后,使用分配到的内存:最后,释放其内存.而对于第三个步骤,何时释放内存及释放哪些变量的内存,则需要使用垃圾回收机制.本文将 ...

  9. php中的内存管理的介绍(转)

    本篇文章给大家带来的内容是关于php中的内存管理的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.php内存管理概述——Zend引擎 由于计算机的内存由操作系统进行管理,所以 ...

随机推荐

  1. Multiple MySQL running but PID file could not be found

    [root@tao Desktop]# service mysql start Starting MySQL SUCCESS! [root@tao Desktop]# service mysql st ...

  2. Sublime Text 全程指南

    摘要(Abstract) 本文系统全面的介绍了 Sublime Text,旨在成为最优秀的 Sublime Text 中文教程. 更新记录 2014/09/27:完成初稿 2014/09/28: 更正 ...

  3. paip.消除 Java 的冗长try/catch/finally

    paip.消除 Java 的冗长try/catch/finally 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...

  4. Leetcode 345 Reverse Vowels of a String 字符串处理

    题意:倒置字符串中的元音字母. 用两个下标分别指向前后两个相对的元音字母,然后交换. 注意:元音字母是aeiouAEIOU. class Solution { public: bool isVowel ...

  5. Python核心编程笔记(类)

    Python并不强求你以面向对象的方式编程(与Java不同) # coding=utf8 class FooClass(object): version = 0.1 def __init__(self ...

  6. phpMyAdmin 登陆需要密码

    网页设计从事者在学习网页时都用过 "xampp" 这款软件吧. 本人今天正常使用时,系统提示可升级 phpMyAdmin.当前最新版本为:phpMyAdmin-4.6.4-all- ...

  7. canvas之特丑时钟

    感觉是不是特想送钟,老是编写些时钟的效果,今日就发个丑丑的时钟,老实说 有没有什么调试canvas的工具,老是要在浏览器刷新查看效果,好累啊~ (┬_┬) 代码: <!DOCTYPE html& ...

  8. android: 内容提供器简介

    我们学了 Android 数据持久化的技术,包括文件存储.SharedPreferences 存 储.以及数据库存储.不知道你有没有发现,使用这些持久化技术所保存的数据都只能在当 前应用程序中访问.虽 ...

  9. nodejs gearman redis

    export NODE_PATH=/root/gearman-1.1.2/node_modulesnpm install gearmanodenpm install redis w.js var re ...

  10. WindowsPhone-GameBoy模拟器开发六--[转]指令系统实现必读:补码

    网上有同行写了些好文章,在此就不现丑了,贴上连接,放在这里为了补充系列的完整性 计算机为什么选用二进制补码 为什么补码重要?因为计算机中内存.寄存器里面存的数都是用补码表示的!