博客
关于我
Netty源码—7.ByteBuf原理三
阅读量:797 次
发布时间:2023-02-15

本文共 1616 字,大约阅读时间需要 5 分钟。

Netty内存管理与分配机制

Netty作为一个高性能的网络框架,其内存管理机制以高效的缓存和内存分配为核心。以下将从内存规格、缓存结构、分配流程以及相关概念入手,深入探讨Netty的内存管理体系。

一、内存规格

Netty的内存规格主要包括以下几种类型:

  • tiny(0-512字节):适用于需求较小的内存分配,如16B、32B、48B等。
  • small(512字节-8KB):适用于中等规模的内存分配,如512B、1K、2K、4K等。
  • normal(8KB-16MB):适用于较大规模的内存分配,如8K、16K、32K等。
  • huge(大于16MB):不在缓存范围内,直接分配大块内存。
  • Netty的内存申请单位是Chunk,每个Chunk大小为16MB,用于向操作系统申请内存。Chunk可以划分为2048个Page(每个Page大小为8KB),进一步划分为多个SubPage(大小范围为0-8KB)。

    二、缓存数据结构

    Netty的缓存数据结构以MemoryRegionCache为核心,主要包括以下组成部分:

  • queue:用于存储和管理内存区域,通过队列来实现缓存的分配和回收。
  • sizeClass:定义内存规格,包括tiny、small、normal三种类型。
  • size:表示缓存区域的固定大小,同一MemoryRegionCache缓存的内存大小一致。
  • MemoryRegionCache的类型包括:

    • tinySubPageHeapCaches:用于16B、32B、48B、...、480B、496B的内存分配。
    • smallSubPageHeapCaches:用于512B、1K、2K、4K的内存分配。
    • normalHeapCaches:用于8K、16K、32K的内存分配。
    • tinySubPageDirectCachessmallSubPageDirectCachesnormalDirectCaches:用于直接分配内存的缓存。

    三、内存分配流程

    内存分配的入口是PooledByteBufAllocatornewHeapBuffer()newDirectBuffer()方法。具体流程如下:

  • 分段规格化:通过normalizeCapacity()方法将需求内存大小转换为符合内存规格的大小。
  • 缓存分配
    • tiny缓存:调用cacheForTiny()找到对应的MemoryRegionCache,尝试从tinySubPageHeapCachestinySubPageDirectCaches中分配内存。
    • small缓存:调用cacheForSmall()找到对应的MemoryRegionCache,尝试从smallSubPageHeapCachessmallSubPageDirectCaches中分配内存。
    • normal缓存:调用cacheForNormal()找到对应的MemoryRegionCache,尝试从normalHeapCachesnormalDirectCaches中分配内存。
  • 内存初始化:分配成功后,通过initBuf()方法将内存初始化为PooledByteBuf对象。
  • 对象池复用:将分配完成的内存放入对象池中,等待下次复用。
  • 四、内存分配重要概念

  • PoolArena:用于管理和分配内存的区域,包含多个PoolChunk。
  • PoolChunk:内存分配的基本单位,大小为16MB,包含多个Page。
  • Page与SubPage:Page为8KB,SubPage为0-8KB,用于细化内存分配,提高利用率。
  • MemoryRegionCache:缓存层,用于快速分配和释放内存,减少对操作系统的dependence。
  • 五、总结

    Netty通过复杂的缓存和内存分配机制,实现了高效的内存管理。内存规格的划分、缓存结构的优化以及灵活的内存分配流程,使Netty在高并发场景下表现出色。

    转载地址:http://vvcfk.baihongyu.com/

    你可能感兴趣的文章
    Object.keys()的详解和用法
    查看>>
    objectForKey与valueForKey在NSDictionary中的差异
    查看>>
    Objective - C 小谈:消息机制的原理与使用
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-Cfor循环实现Factorial阶乘算法 (附完整源码)
    查看>>
    Objective-C——判断对象等同性
    查看>>
    objective-c中的内存管理
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>