专栏首页InvQ的专栏Netty 高性能内存管理设计(2)

Netty 高性能内存管理设计(2)

Netty 的内存规格分类以及内存管理的核心组件,今天我们继续介绍 Netty 内存分配与回收的实现原理。有了上节课的基础,相信接下来的学习过程会事半功倍。

本文章会侧重于详细分析不同场景下 Netty 内存分配和回收的实现过程,让你对 Netty 内存池的整体设计有一个更加清晰的认识。

内存分配实现原理

Netty 中负责线程分配的组件有两个:PoolArena和PoolThreadCache。PoolArena 是多个线程共享的,每个线程会固定绑定一个 PoolArena,PoolThreadCache 是每个线程私有的缓存空间,如下图所示。

在上节课中,我们介绍了 PoolChunk、PoolSubpage、PoolChunkList,它们都是 PoolArena 中所用到的概念。PoolArena 中管理的内存单位为 PoolChunk,每个 PoolChunk 会被划分为 2048 个 8K 的 Page。在申请的内存大于 8K 时,PoolChunk 会以 Page 为单位进行内存分配。当申请的内存大小小于 8K 时,会由 PoolSubpage 管理更小粒度的内存分配。

PoolArena 分配的内存被释放后,不会立即会还给 PoolChunk,而且会缓存在本地私有缓存 PoolThreadCache 中,在下一次进行内存分配时,会优先从 Poo

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • elastic search 修改日志级别为warn

    登录es服务器,打开日志,发现全部是超时日志,再往上看发现全是debug级别的日志,而且连每条query语句都打印了出来。

    MickyInvQ
  • protobuffer的前世今生(二)——编码

    在一个应用中,你创建一个Test1message 并且设置 a为150.你可以序列化这个消息到输出流,你可以得到3个字节 08 96 01 到此为止,如此之...

    MickyInvQ
  • 单元测试覆盖率

    运行完成后,我们就可以看单元测试的覆盖率了,覆盖率包括类覆盖率,方法覆盖率,代码行覆盖率。

    MickyInvQ
  • 癌症“登月计划”需要大数据作后盾

    大数据文摘
  • 开放平台之安全

    什么是开放平台 开放平台就是将企业中的业务的核心部分经过抽象和提取,形成面向企业或者面向用户的增值系统,为企业带来新的业务增涨点。 因为是企业的核心业务能力,所...

    cloudskyme
  • 了解几种常用的哈希校验码

    最近下载msdn 版vista时,发现微软同时提供了SHA1校验码,我们就可以通过这些校验工具来比较下载的文件是否原汁原味。

    williamwong
  • 如何管理内存

    内存是一种你不可以耗尽的珍贵资源。在一段时期里,你可以无视它,但最终你必须决定如何管理内存。

    硬核编程
  • 企业云费控实践挑战重重 规范化指导是第一步| 调研

    T客汇官网:tikehui.com 移动信息化研究中心 闫鹏 这里是移动信息化研究中心在 T 客汇上的研报专栏。我们每周针对企业服务各个领域,进行深度解读。 ...

    人称T客
  • Laravel jwt 多表(多用户端)验证隔离的实现

    Tips: tymon/jwt-auth 作者已通过增加 prv 字段修复这一问题#1167,但是如果你是用 dingo api + jwt 的话,该问题依然存...

    砸漏
  • 次世代的老罗,真的“胖”了,但是……

    非著名程序员

扫码关注云+社区

领取腾讯云代金券