《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

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

释放空间free()

当chunk使用完毕后需要释放,如果是池化chunk则需要放回池中供下次循环利用,如果是非池化的则直接释放对应的物理空间。

《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

下面继续分析释放具体物理空间的destroyChunk()方法和释放chunk的freeChunk()方法。

destroyChunk()

该方法为抽象方法,由具体实现类实现,以DirectArena为例

《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

freeChunk()

释放chunk的时候会调用PoolChunkList的free()方法进行处理,根据释放后chunk的利用率决定是否向前移动,即移动到利用率更低的PoolChunkList,如果利用率已经低于1%则需要删除不再使用,同时要释放其对应的物理空间。

《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

扩容reallocate()

在使用buf的过程中有时候我们需要扩大容量存放更多的数据或者减少容量,reallocate()方法就提供该项功能。

《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

在这个过程中allocate()、free()方法之前已经分析过,接下来继续分析数据拷贝的memoryCopy()。

memoryCopy()

《Netty》从零开始学netty源码(五十一)之PoolArena的内存释放与扩容

至此,PoolArena类分析至此完毕,感谢阅读。

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

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

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

我是三横兰,那个三横的兰
文章来源地址https://www.toymoban.com/news/detail-433184.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核心技术十一--用Netty 自己 实现 dubbo RPC

    RPC(Remote Procedure Call) :远程 过程调用,是一个计算机 通信协议。该协议允许运 行于一台计算机的程序调 用另一台计算机的子程序, 而程序员无需额外地为这 个交互作用编程 两个或多个应用程序都分 布在不同的服务器上,它 们之间的调用都像是本地 方法调用一样(如图

    2024年02月16日
    浏览(48)
  • 【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日
    浏览(54)
  • 34.Netty源码之Netty如何处理网络请求

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

    2024年02月11日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包