当前位置: 首页 > news >正文

网站代发怎么做网站建设和seo是什么关系

网站代发怎么做,网站建设和seo是什么关系,营销网站服务器,中山做网站Netty ByteBuf工作原理,和NIO里ByteBuffer区别? Java NIO 提供了ByteBuffer 作为它 的字节容器,但是这个类使⽤起来过于复杂,⽽且也有些繁琐。 ByteBuf是Netty框架中的一个关键类,专门设计来处理字节数据,…
  • Netty ByteBuf工作原理,和NIO里ByteBuffer区别?

Java NIO 提供了ByteBuffer 作为它 的字节容器,但是这个类使⽤起来过于复杂,⽽且也有些繁琐。

ByteBuf是Netty框架中的一个关键类,专门设计来处理字节数据,旨在替代Java标准NIO库中的ByteBuffer。

相较于ByteBuffer,ByteBuf引入了更高效的数据操作方式和更丰富的API支持。其核心优势在于支持自动读写切换、内存池化以及零拷贝技术,这些特性共同作用使得ByteBuf在数据处理方面的性能大大超越了传统的ByteBuffer。

一、自动读写切换

1.NIO 里的 ByteBuffer

对于 Java NIO 的 Buffer,其有几个重要的属性:positionlimitcapacity,其中position代表的是下一个读或写的位置,limit是可被读或写的最高位,而capacity就是 Buffer 的容量了,之所以要在读和写切换的时候进行手动操作(clear()flip()),主要是因为在 NIO 中,positionlimit在读的时候代表的是下一个需读的位和可读的最高位,但是在写的时候又代表下一个需写的位和可写的最高位(其实就是capacity),换句话说这两个变量在不同的操作场景下有不同的含义,对应值也不同,所以需要在读写切换的时候进行手动操作

2.Netty里的ByteBuf

而 Netty 的 ByteBuf 则对这一点做了改进,其针对读写操作分别增加上了readerIndex(原来的position)writerIndex(对应 NIO 中的 limit,使用的时候不需要考虑读写转换。

  • 读的时候就变动readerIndex的值,此时可读的最高位其实就是writerIndex
  • 写的时候就变动writerIndex的值,此时可写的最高位就是capacity

说白了就是两个变量分别管理读和写的操作位,互不冲突,也就不存在读写切换的时候手动操作。


 二、内存池化

1.给 ByteBuf 分配内存

在 Netty 中,ByteBuf 用来作为数据的容器,是一种会被频繁创建和销毁的对象。

分配 ByteBuf 需要的内存空间有三种方式

  • 堆缓冲区(HeapByteBuf)

  1. 优点:内存的分配和回收速度⽐较快,可以被JVM⾃动回收。由于在堆上被 JVM 管理,在不被使⽤时可以快速释放。可以通过ByteBuf.array() 来获取 byte[] 数据。

  2. 缺点:如果进⾏socket的IO读写,需要额外做⼀次内存复制,将堆内存对应的缓冲区复制到内核Channel中,性能会有⼀定程度的下降。

  • 直接缓冲区(DirectByteBuf),堆外内存。

  1. 优点:将它写⼊或从Socket Channel中读取时,由于减少了⼀次内存拷⻉,速度⽐堆内存块。

  2. 缺点:相⽐堆内存,它的分配和回收速度会慢⼀些。

  • 复合缓冲区(CompsiteByteBuf),顾名思义就是将上述两类缓冲区聚合在⼀起。Netty 可以将堆缓冲区和直接缓冲区的数据放在⼀起,让使⽤更加⽅便。

但抛开哪个代价高哪个代价低不说,光是频繁创建和频繁销毁这一点,就已奠定了效率不高的基调。Netty 为了解决这个问题,引入了池化技术,池化技术的思想不复杂,和线程池思想类似,说白了就是对一些可重用的对象用完不回收,后面需要再次使用,以减少创建和销毁对象带来的资源损耗。

2.引用计数 来管理 ByteBuf

引用计数就是实现池化的关键技术点

(不过并非只有池化的 ByteBuf 才有引用计数,非池化的也会有引用)。

  • ByteBuf实现了ReferenceCounted接口,表明该类是一个引用计数管理对象。
  • 每一个引用计数对象,都维护了一个自身的引用计数,通过refCnt()方法可以得到当前的引用计数。
  • 当第一次被创建时,引用计数为 1,调用retain()方法会增加自身的引用计数值。
  • 调用release()方法减少当前的引用计数值,如果引用计数值为 0,当前的 ByteBuf 自动释放,返回值为true

引用计数机制有效预防内存泄漏,确保及时回收不再使用的内存资源。 

3.Netty 实现内存池化

Netty 提供了两种 ByteBufAllocator 的实现,分别是:

  • PooledByteBufAllocator,实现了 ByteBuf 的对象的池化,提⾼性能减少并最⼤限度地减少内存碎⽚。
  • UnpooledByteBufAllocator,没有实现对象的池化,每次会⽣成新的对象实例。 

如何释放?

  • 手动释放:调用release()方法
  • 自动释放:略

释放后如何?

  • 池化的 ByteBuf,那么就会重新进池子,以待重用;
  • 非池化的 ByteBuf,则销毁底层的字节数组引用或者释放对应的堆外内存。

池化技术通过重用已有的ByteBuf实例,减少了频繁的内存分配与回收操作,显著提升了性能。


三、零拷贝技术

Netty必知必会(一)——零拷贝-CSDN博客

  • slice():创建一个与原始ByteBuf共享数据的新视图,但拥有独立的读写索引。
  • duplicate():创建一个完整的ByteBuf副本,共享数据内容但维护一套独立的索引。
  • compositeByteBuf():可以将多个ByteBuf合并为一个逻辑上的ByteBuf,实现数据的逻辑组合而非物理合并。

四、参考

一文读懂网络框架Netty_文化 & 方法_蔡昱星_InfoQ精选文章

 Netty详解ByteBuf_netty bytebuf-CSDN博客

 Netty之ByteBuf详解与实战-CSDN博客

http://www.yayakq.cn/news/104533/

相关文章:

  • 自建销售网站wordpress 博客程序
  • 网站下要加个备案号 怎么做中国室内设计公司
  • 高明网站设计多少钱网站建设方案的摘要怎么写
  • 对文化传播网站建设的建议什么是wordpress静态化
  • 网站的空间怎么查智能手机应用开发
  • 朝阳网站中国房地产行情分析
  • 网站建设主要包括两个方面贵州今天刚刚发生的新闻
  • 国外设计模板网站如何看出一个网站有做seo
  • 网站建设高级wordpress图像并排
  • 网站建设都需要那些材料河西网站建设开发
  • 深圳网站设计公司排名前十开发网站网络公司有哪些
  • 做网站都注意哪些东西商城微发布官网
  • 西宁网站优化导入wordpress
  • 宿州市建设工程质量监督站网站建设银行什么网站可买手表
  • 做网站发布信息百度惠生活
  • app开发网站开发html制作旅游景点网页
  • 上海有几个区几个县有关优化网站建设的书籍
  • 有了源码可以做网站吗四川省住房与建设厅网站
  • 重点培育学科建设网站宿州网站网站建设
  • 重庆网络网站推广微信数据统计小程序
  • 昆明学校网站建设没有经验可以做新媒体运营吗
  • 许昌市建设路小学网站扫码进网页怎么制作
  • 网站建设简述需求分析的基本概念及内容做外贸的网站有何用处
  • 男女做a视频网站济南wordpress 建站
  • 写作网站平台快手里做网站荣耀封面的视频
  • iis网站服务被禁用长春兼职
  • 外网设计素材网站企业网站的建立费用
  • 寿光市网站建设发布个人免费网站的一般流程图
  • 响应式网站自助建站wordpress如何添加搜索到主菜单
  • 网站运营技巧用react和ant.d做的网站例子