Netty中的ByteBuf 申请和释放

首先要分析一下,Channe!InboundHandler是否是线程安全的?

初步的判断,每个线程都会有一个独立的Channe!InboundHandler实例化对象。所以如果没有static的类变量,那么就是线程安全的。

Bytebuf提供接口方法要比ByteBuffer简洁并强大。这篇在ByteBuf基础上学习下主要的ByteBuf,包括:poolHeapByteBuff、pooledDirectByteBuf、UpooledHeapByteBuf、UnpooledDirectByteBuf。

Bytebuf分类分为2个维度,

第一个维度是堆非堆维度

堆缓冲区(HeapByte)

        是将数据存储在JVM堆空间中,特点是在内存的分配和回收速度快,可以被JVM自动回收,缺点是如果进行socket的I/O读写,需要额外一次内存复制,将堆内存对应的缓冲区复制到内核Channel中,性能会有一定程度下降。

直接内存(DirectByte)

        非堆内存,在堆外进行内存分配,相比于堆内存,分配和回收速度会慢一些,但将它写入或从socket channel中读取时,由于少一次内存复制,速度比堆内存快。通常在I/OI/O通信线程的读写缓冲区使用DirectByteBuf,后端业务消息的编解码模块使用HeapByteBuf,可以达到很好的性能效果。直接内存,需要程序员进行回收。JVM无法进行回收。

第二个维度:内存回收角度

从内存回收角度看,ByteBuf分为两类:基于pooled的和普通的ByteBuf。两者的区别是基于pooled的ByteBuf可以重复利用,自己维护一个内存池,可以循环利用创建的ByteBuf,提升内存使用效率,降低由于高负载导致的频繁GC。

所以,2×2=4,就出现4个类别

UnpooledHeapByteBuf:

UnpooledHeapByteBuf:最基于堆内存进行内存分配的字节缓冲区,它没有基于对象地技术实现,这就意味着每次IO的读写,都会创建一个新的UnpooledHeapByteBuf:频繁的进行大块内存的分配和回收对性能会造成一定影响,但是相比于堆外内存的申请和释放, 它的成本还是低一些.也不容易出现问题,因此在满足性能的情况下推荐UnpooledHeapByteBuf.


Server端采用的是bind

client端采用是Connect.在Connect端也可以连接多个,在书中,有个例子关于泄漏,在Upgrade上的第2章上有

在第四章的例子上,我认为也不一定需要采用Promise来接受数据,直接放入到handle中应该是可以的.

Client端写程序,那么在active中,执行用户线程,然后再写.不会进入

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

---------------------

作者:qq_18535263

来源:CSDN

原文:https://blog.csdn.net/qq_18535263/article/details/79373878

版权声明:本文为博主原创文章,转载请附上博文链接!


问题

    public static void schedule() {

ScheduledExecutorService executor =

Executors.newScheduledThreadPool(10);

    ScheduledFuture future = executor.schedule(

new Runnable() {

@Override

        public void run() {

System.out.println("Now it is 60 seconds later");

        }

}, 60, TimeUnit.SECONDS);

    //...

    executor.shutdown();

}

这一段代码执行后,是一个线程池中每个都执行吗?

从线程池中,选择一个线程来执行的方法?在一个线程中,有无任务的队列?

现在执行之后,为什么要手动的shutdown()?不能自动的回收吗?


ThreadPoolExecutor类可设置的参数主要有:

corePoolSize

在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务


请求ByteBuf 被Netty 框架申请后竟然没有被释放,(从堆内存转到直接内存中)

策略1:业务ChanneInboundHandler 继承自SimpleChanneInboundHandler

策略2:直接调用ctx.fireChannelRead(msg),由最后的tail来释放。如果不调用这个,那么到这个handle,直接就结束了(?)

发送的消息

    被Netty的框架自动进行释放


客户端的channelActive,什么时候执行?

ByteBuf respMsg = allocat。r . heapBuffer(b。dy . length);

respMsg.writeBytes(body) ;//作为示例,简化处理,将请求返回

ctx.writeAndFlush(respMsg);

writeBytes主要是干什么?

4.1.X的版本调整


channelRead0:继承了SimpleChannelInboundHandler,它应该是多一个释放了消息的资源,

channelRead:继承了ChannelInboundHandlerAdapter

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 转载自:http://www.cnblogs.com/rainy-shurun/p/5213086.html Ne...
    达微阅读 2,514评论 0 14
  • ByteBuf基础 Java Nio 的Buffer 在进行数据传输的过程中,我们经常会用到缓冲区。在Java N...
    达微阅读 1,268评论 0 2
  • 什么是ByteBuf Netty提供了强大的随机和顺序访问零字节或多个字节的序列,为一个或多个原始的字节数组和JD...
    0爱上1阅读 4,506评论 0 1
  • 哪里描述不正确望指正. 欢迎转载大纲 数据容器的选择 Java NIO使用ByteBuffer.classNett...
    OisCircle阅读 1,350评论 0 5
  • [TOC] 内存管理 一、托管堆基础 在面向对象中,每个类型代表一种可使用的资源,要使用该资源,必须为代表资源的类...
    _秦同学_阅读 3,801评论 0 3