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

做网站犯法了 程序员有责任吗网络推广的基本方法有哪些

做网站犯法了 程序员有责任吗,网络推广的基本方法有哪些,商城网站建设技术论坛,供应链软件系统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.tj-hxxt.cn/news/16125.html

相关文章:

  • 网站功能优化的意义拼多多女装关键词排名
  • 网站怎么样做优化简短的营销软文范文
  • 注册域名的网站有哪些视频互联网推广选择隐迅推
  • 网站实施方案ai智能营销系统
  • 面试网站建设的问题6网站搜索引擎优化技术
  • 网站建设与维护的实训总结百度seo排名优化公司哪家好
  • 门户网站的营销特点seo关键词推广价格
  • wordpress站群教程营销方案策划
  • 福田做商城网站建设找哪家公司比较安全秒收录关键词代发
  • 重庆项目信息网seo排名优化软件有
  • 怎么在免费空间里面做网站百度网站收录入口
  • 公司网站建设做分录怎么接广告推广
  • wordpress主题 苏醒seo的方式包括
  • 网站seo三要素b站怎么推广自己的视频
  • 怎样做网站变手机软件百度网址安全中心
  • 网站建设 by 筑巢seo快速优化
  • 网站如何做双语言友情链接的作用
  • 宿迁网站建设网络营销的现状分析
  • 国际加速器永久免费版宁波seo关键词优化方法
  • 教做蛋糕的网站宁波seo推广公司排名
  • 一级域名做网站的好处东莞网站seo公司哪家大
  • 大连软件公司排行新媒体seo培训
  • 主题资源网站制作平台百度优化教程
  • 天津网站建设icp备友情链接地址
  • 做视频自媒体要投稿几个网站发布软文的平台
  • 网络营销怎么做好推广网站排名优化服务公司
  • 网站买东西第三方怎么做技能培训机构排名前十
  • 移动互联网app开发seo优化是什么
  • 大型企业展厅设计公司兰州seo优化入门
  • 如何做网站来做淘宝客河北网站建设案例