《Netty》从零开始学netty源码(四十九)之PoolArena

这篇具有很好参考价值的文章主要介绍了《Netty》从零开始学netty源码(四十九)之PoolArena。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PoolArena

Netty中分配内存是委托给PoolArena来管理的,它主要有两个实现类:
《Netty》从零开始学netty源码(四十九)之PoolArena

默认情况下使用的DirectArena,它的数据结构如下:
《Netty》从零开始学netty源码(四十九)之PoolArena

从属性中我们看到PoolArena主要分配三种类型的内存,小于32KB的分配small类型的PoolSubpage,存储在smallSubpagePools,32KB~4MB的分配normal类型的PoolChunk,根据其利用率的不同存放到不同的PoolChunkList,大于4MB的则创建非池化的PoolChunk。

接下来我们通过allocate()方法来分析它对内存分配的管理。

allocate()

《Netty》从零开始学netty源码(四十九)之PoolArena

分配内存主要有两步:

  1. 获取PooledByteBuf缓存
  2. 分配缓存所对应的具体内存空间

创建newByteBuf()

获取buf主要是从对象池中获取,具体过程的可参考前一篇文章。
《Netty》从零开始学netty源码(四十九)之PoolArena

分配具体的内存空间allocate()

《Netty》从零开始学netty源码(四十九)之PoolArena

从中可以看到根据请求的内存大小来创建不同的空间,具体的后文再详细分析。
全文完,如果觉得文章有点意思,不妨点个“赞”或者“在看”吧,您的每一份正反馈都是对三横兰写作的最大肯定,感谢阅读_

每天坚持一点点,每天进步一点点

坚持是日复一日,质变需日积月累

我是三横兰,那个三横的兰
文章来源地址https://www.toymoban.com/news/detail-434296.html

到了这里,关于《Netty》从零开始学netty源码(四十九)之PoolArena的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Netty》从零开始学netty源码(五十)之PoolArena的内存分配

    ​PoolArena根据请求大大小主要分配三中类型的内存,小于28KB的分配PoolSubpage,28KB~4MB的分配池化的PoolChunk,4MB以上的分配非池化的内存​。 如果请求的内存空间小于28KB则分配small类型的空间,即PoolSubpage. 如果请求的大小在28KB~4MB之间则分配normal类型的空间,即池化的PoolChunk,

    2024年02月02日
    浏览(27)
  • 《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

    当chunk使用完毕后需要释放,如果是池化chunk则需要放回池中供下次循环利用,如果是非池化的则直接释放对应的物理空间。 下面继续分析释放具体物理空间的destroyChunk()方法和释放chunk的freeChunk()方法。 destroyChunk() 该方法为抽象方法,由具体实现类实现,以DirectArena为例 fre

    2024年02月02日
    浏览(31)
  • 从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

    1.1. Channel Buffer Channel 在Java NIO(New I/O)中,“Channel”(通道)是一个重要的概念,用于 在非阻塞I/O操作中进行数据的传输 。Java NIO提供了一种更为灵活和高效的I/O处理方式,相比于传统的I/O,它具有更好的性能和可扩展性。 常见的Java NIO中的通道类型: FileChannel(文件通道

    2024年02月20日
    浏览(36)
  • 【Netty】Netty中的超时处理与心跳机制(十九)

    回顾Netty系列文章: Netty 概述(一) Netty 架构设计(二) Netty Channel 概述(三) Netty ChannelHandler(四) ChannelPipeline源码分析(五) 字节缓冲区 ByteBuf (六)(上) 字节缓冲区 ByteBuf(七)(下) Netty 如何实现零拷贝(八) Netty 程序引导类(九) Reactor 模型(十) 工作原理

    2024年02月06日
    浏览(30)
  • 【Netty专题】【网络编程】从OSI、TCP/IP网络模型开始到BIO、NIO(Netty前置知识)

    我是有点怕网络编程的,总有点【谈网色变】的感觉。为了让自己不再【谈网色变】,所以我想过系统学习一下,然后再做个笔记这样,加深一下理解。但是真要系统学习,其实还是要花费不少时间的,所以这里也只是简单的,尽可能地覆盖一下,梳理一些我认为比较迫切需

    2024年02月06日
    浏览(52)
  • Netty-Netty源码分析流程图

     补充

    2024年01月23日
    浏览(41)
  • 34.Netty源码之Netty如何处理网络请求

    通过前面两节源码课程的学习,我们知道 Netty 在服务端启动时会为创建 NioServerSocketChannel,当客户端新连接接入时又会创建 NioSocketChannel,不管是服务端还是客户端 Channel,在创建时都会初始化自己的 ChannelPipeline。 如果把 Netty 比作成一个生产车间,那么 Reactor 线程无疑是车间

    2024年02月11日
    浏览(27)
  • 13.Netty源码之Netty中的类与API

    Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractBootstrapB extends AbstractBootstrapB, C, C extends Channel ​ ServerBootstrap extends AbstractBootstrapServerBootstrap, ServerChannel ​

    2024年02月15日
    浏览(43)
  • 【Android从零单排系列四十九】《Android中自定义Fragment的实现方法》

    目录 前言 一  Fragment介绍 二  Fragment的缺点 三  自定义Fragment的步骤 四 自定义Fragment的demo 小伙伴们,在前面的文章中,我们谈到了Android开发中的自定义view的基本概念及方法等,本文我们实际举例自定义一个Fragment。 Fragment是Android中一种用于构建灵活和可重用界面组件的基

    2024年02月13日
    浏览(30)
  • [Netty源码] Netty轻量级对象池实现分析 (十三)

    1.对象池技术介绍 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象, 类似线程池。对象池缓存了一些已经创建好的对象, 避免需要的时候创建。同时限制了实例的个数。 池化技术最终要的就是重复的使用池内已经创建的对象。 创建对象的开销大 会创建大量的

    2023年04月18日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包