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

贵阳网站建设seo公众号开发线上营销推广方法

贵阳网站建设seo公众号开发,线上营销推广方法,wordpress 跳转 代理,西安有几个区Netty ByteBuf 分配 本文主要内容关于 ByteBuf 分配介绍,为了更好的理解本文,我们可以带着几个问题思考 在IO密集型业务场景下,可能涉及大量ByteBuf分配,这时我们需 要考虑会不会产生OOM会不会出现频繁GC会不会内存泄露 根据上…

Netty ByteBuf 分配

本文主要内容关于 ByteBuf 分配介绍,为了更好的理解本文,我们可以带着几个问题思考

  • 在IO密集型业务场景下,可能涉及大量ByteBuf分配,这时我们需
    • 要考虑会不会产生OOM
    • 会不会出现频繁GC
    • 会不会内存泄露

根据上面的问题,没准你也设计出netty的分配方案,主要关键点

  • 避免重复分配,你也许会想到 线程池类似的复用技术
  • 解放GC,你会如何绕过GC , 于是想到直接内存,因为直接内存需要手动释放资源,因此你需要考虑潜在的内存泄露问题

ByteBufAllocator

ByteBufAllocator 是 Netty用于分配 ByteBuf 对象 的接口,ByteBuf 分配方式主要有下面两个维度

  • 在堆上分配还是使用直接内存

    堆上分配,受JVM 垃圾回收管理,不需要手动释放资源。

    直接内存不受JVM垃圾收集机制的管理,需要手动释放资源,在处理I/O操作时,直接内存可以提高性能,因为它减轻垃圾收集的压力

  • 使用缓存池复用 和 不使用缓存池

池化技术我们平常接触的有数据库连接池、线程池等,它避免资源重复创建和销毁带来的代价,Netty 对象分配也支持用缓冲池复用。

ByteBufAllocator 分配方法介绍

  • buffer()

自动判断在堆上分配 or 直接内存上分配(判断依据是否支持Unsafe)

  • ioBuffer()

    尽可能在对直接内存上分配,因为直接内存更适合用于IO,如果不支持则在堆上分配。

  • heapBuffer()

在堆上分配,受垃圾回收机制管理

  • directBuffer()

使用直接内存分配

  • CompositeByteBuf 分配

compositeBuffer()/compositeHeapBuffer()/compositeDirectBuffer()/ 用于CompositeByteBuf 分配

ByteBufAllocator 主要实现类

  • PooledByteBufAllocator

使用缓冲池技术,通过重复利用已经分配的ByteBuf,能够有效地减少内存分配和释放的开销。

  • UnpooledByteBufAllocator

它在每次分配ByteBuf时都会创建一个新的实例。

Unpooled

非池化分配也可以使用Unpooled 工具类,Unpooled 工具类其实调用UnpooledByteBufAllocator进行分配的,它提供了许多便捷的静态方法。

使用举例


import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.buffer.UnpooledByteBufAllocator;public class ByteBufAllocatorExample {public static void main(String[] args) {// 使用池化分配器ByteBufAllocator pooledAllocator = PooledByteBufAllocator.DEFAULT;// 分配一个堆内存 ByteBufByteBuf heapBuf = pooledAllocator.heapBuffer(1024);heapBuf.writeBytes("Hello, Heap Buffer!".getBytes());System.out.println("Heap Buffer: " + heapBuf.toString(io.netty.util.CharsetUtil.UTF_8));heapBuf.release();// 分配一个直接内存 ByteBufByteBuf directBuf = pooledAllocator.directBuffer(1024);directBuf.writeBytes("Hello, Direct Buffer!".getBytes());System.out.println("Direct Buffer: " + directBuf.toString(io.netty.util.CharsetUtil.UTF_8));directBuf.release();// 使用非池化分配器ByteBufAllocator unpooledAllocator = UnpooledByteBufAllocator.DEFAULT;// 分配一个堆内存 ByteBufByteBuf heapBufUnpooled = unpooledAllocator.heapBuffer(1024);heapBufUnpooled.writeBytes("Hello, Unpooled Heap Buffer!".getBytes());System.out.println("Unpooled Heap Buffer: " + heapBufUnpooled.toString(io.netty.util.CharsetUtil.UTF_8));heapBufUnpooled.release();// 分配一个直接内存 ByteBufByteBuf directBufUnpooled = unpooledAllocator.directBuffer(1024);directBufUnpooled.writeBytes("Hello, Unpooled Direct Buffer!".getBytes());System.out.println("Unpooled Direct Buffer: " + directBufUnpooled.toString(io.netty.util.CharsetUtil.UTF_8));directBufUnpooled.release();ByteBuf unpooledBuffer = Unpooled.buffer(1024);}
}

总结

要不要使用缓冲池,使用直接内存还是Java堆都要看具体业务,在IO场景Netty 内部优先使用直接内存;频繁的IO操作推荐使用缓冲池分配,避免内存频繁创建和销毁带来的开销。

http://www.dt0577.cn/news/49094.html

相关文章:

  • 装修网app官网搜狗seo怎么做
  • 做 暧视频在线观看网站优化关键词排名外包
  • 怎样评价一个网站做的好与不好百度指数上多少就算热词
  • 购物网站怎么做樱桃bt磁力天堂
  • 自己如何做外贸公司网站小红书kol推广
  • 网站建设的公司系统规划方案b站怎么推广自己的视频
  • wordpress排除首页显示刷关键词排名seo
  • 做网站 没内容百度电话客服24小时人工
  • 深圳公司形象墙制作天津短视频seo
  • wordpress采集后排版国内专业的seo机构
  • 旅游网站源码免费下载平面设计正规培训机构
  • 济南香港国际网站建设郑州网站优化顾问
  • 如何做返利网站百度关键词在线优化
  • 邯郸网站建设恋家搜狗站长平台验证不了
  • 北京做网站制作的公司哪家好常用的营销策略
  • 在国内可以做国外的网站吗网站的优化从哪里进行
  • 赤峰最好的网站建设公司今日新闻摘抄
  • 柳北网站制作某网站seo诊断分析
  • 云南建网站需要多少钱此网站服务器不在国内维护
  • 做物流网站电话军事新闻头条最新消息
  • 武汉住房与城乡建设官网百度seo怎么优化
  • 做办公用品网站资料怎么收集百度下载免费官方安装
  • 好点得手机网站托管宁波seo优化项目
  • 网站建设 泰安常州百度搜索优化
  • 泉州建站模板搭建无线网络优化是做什么的
  • 网站备案 地域做竞价托管的公司
  • 浙江制做网站的公司如何免费发布广告
  • 科技公司网站建设百度关键词排名查询工具
  • 有用模板网官网湖南关键词优化排名推广
  • 天津网站制作哪个好针对大学生推广引流