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

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

​PoolArena根据请求大大小主要分配三中类型的内存,小于28KB的分配PoolSubpage,28KB~4MB的分配池化的PoolChunk,4MB以上的分配非池化的内存​。

tcacheAllocateSmall()

如果请求的内存空间小于28KB则分配small类型的空间,即PoolSubpage.

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

tcacheAllocateNormal()

如果请求的大小在28KB~4MB之间则分配normal类型的空间,即池化的PoolChunk,采用二分查找的方式从PoolArena的5个利用率不同的list中选取chunk,如果5个list中都无法获得PoolChunk则创建新的chunk,创建成功后分配空间给buf,保存在qInit链表中。

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

newChunk()

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

allocateHuge()

当请求的空间大小大于4MB的时候分配的是非池化的chunk,这种chunk使用结束后直接释放.

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

newUnpooledChunk()

非池化的chunk创建过程与池化的chunk一致,只是不需要传入pageSize、pageShifts、chunkSize等切段使用的参数,因为它只分配一次,使用完毕后会直接释放。

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

至此,PoolArena的内存分配分析完毕,感谢阅读。
全文完,如果觉得文章有点意思,不妨点个“赞”或者“在看”吧,您的每一份正反馈都是对三横兰写作的最大肯定,感谢阅读_

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

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

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

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

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

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

相关文章

  • 《Netty》从零开始学netty源码(四十六)之PooledByteBuf

    Netty中一大块内存块 PoolChunk 默认大小为4MB,为了尽可能充分利用内存会将它切成很多块 PooledByteBuf , PooledByteBuf 的类关系图如下: PooledUnsafeDirectByteBuf 与 PooledUnsafeHeapByteBuf 直接暴露对象的底层地址。 PooledByteBuf 的创建过程开销很大,高并发情况下进行网络I/O时会创建大量的

    2024年02月01日
    浏览(86)
  • 《Netty》从零开始学netty源码(四十二)之PoolChunk.runsAvailMap

    PoolChunk 中的 runsAvailMap 属性用于存放可用的run的信息, PoolChunk 中每一次分配内存都会更新 runsAvailMap 中可用的run的起始信息及末尾信息,先看下它的数据结构: 我们看下它的构造函数是如何赋值的: PoolChunk 的默认大小为4MB,对应sizeClasses表格中的31,所以array的初始长度为

    2023年04月25日
    浏览(39)
  • 从零开始学习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日
    浏览(48)
  • 24.Netty源码之合理管理堆内存

    内存使用目标 •内存占用少(空间) •应用速度快(时间) 即多快好省 对 Java 而言:减少 Full GC 的 STW(Stop the world)时间 内存使用技巧 • 减少对象本身大小 md 例 1:用基本类型就不要用包装类。 例 2: 应该定义成类变量(静态变量)的不要定义为实例变量。 ​ •一个类 - 一个类变量

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

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

    2024年02月06日
    浏览(62)
  • Netty内存管理--Chunk&Page

    1. Netty网络应用基础 2. Java I/O 3. IO/模型 4. 网络应用编解码 5. Netty Pipeline 6. Netty EventLoopGroupEventLoop 7. Netty ThreadLocalFastThreadLocal 8. Netty FuturePromise 9. Netty内存管理–(旧)PoolChunk伙伴分配 10. Netty内存管理–内存池空间规格化SizeClasses 11. Netty内存管理–PoolChunkPoolSubPage 12. Netty内存管理

    2023年04月21日
    浏览(95)
  • gateway报 netty堆外内存溢出问题解决io.netty.util.internal.OutOfDirectMemoryError

    昨天线上网关突然无法访问。打开日志看到错误信息“io.netty.util.internal.OutOfDirectMemoryError” 堆外内存溢出。。这也没碰到过啊,看来今天准点下班的愿望又落空了。老规矩面向百度编程。先看看网上有没有其他兄弟碰到这个问题。一顿搜索之后发现,很多博客都是一知半解并

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

     补充

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

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

    2024年02月11日
    浏览(36)
  • 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日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包