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

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

PoolThreadLocalCache

前面讲到PoolThreadCache,它为线程提供内存缓存,当线程需要分配内存时可快速从其中获取,在Netty中用PoolThreadLocalCache来管理PoolThreadCache,它的数据结构如下:
《Netty》从零开始学netty源码(五十四)之PoolThreadLocalCache

PoolThreadLocalCache相当于java的ThreadLocal,我们知道ThreadLocal中维护的是ThreadLocalMap,使用hashcode来做下标,而Netty中自己维护了一个InternalThreadLocalMap,内部使用的是一个数组来存放变量值,使用index来寻找当前线程对应的变量,它的性能比map要好一些。

接下来分析它的三个方法:get()set()remove()

get()

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

子类PoolThreadLocalCacheinitialize()方法进行重写:
《Netty》从零开始学netty源码(五十四)之PoolThreadLocalCache

接下来我们看下定时任务trimTask()

trimTask

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

set()

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

如果变量值value有效则将其放入map中,否则将其删除,接下来具体分析这两个方法。

setKnownNotUnset()

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

remove()

删除的时候需要两步,第一步是先将其从待删除列表中删除,第二步则是对象自己本身的清除工作。

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

removeFromVariablesToRemove()

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

onRemoval()

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

至此,PoolThreadLocalCache分析至此完毕。
文章来源地址https://www.toymoban.com/news/detail-435307.html

到了这里,关于《Netty》从零开始学netty源码(五十四)之PoolThreadLocalCache的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索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)
  • [Netty] FastThreadLocal (十四)

    1.FastThreadLocal介绍 FastThreadLocal是Netty中常用的一个工具类, FastThreadLocal所使用的InternalThreadLocalMap内部不是采用哈希表, 而是直接通过数组索引的方式返回object, 省去了哈希表的查找过程, 因此效率相比于JDK的ThreadLocal更高。 2.FastThreadLocal分析 每个FastThreadLocal带有一个类型为int的

    2023年04月18日
    浏览(36)
  • 从零开始学习 Java:简单易懂的入门指南之HashMap及TreeMap源码解读(二十四)

    Tip: 1.TreeMap添加元素的时候,键是否需要重写hashCode和equals方法? 此时是不需要重写的。 2.HashMap是哈希表结构的,JDK8开始由数组,链表,红黑树组成的。既然有红黑树,HashMap的键是否需要实现Compareable接口或者传递比较器对象呢? 不需要的。 因为在HashMap的底层,默认是利用

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

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

    2024年02月06日
    浏览(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)
  • [Netty源码] Netty轻量级对象池实现分析 (十三)

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

    2023年04月18日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包