文档章节

netty bytebuff 释放原则和防止内存泄露

greki
 greki
发布于 2015/04/22 16:09
字数 219
阅读 86
收藏 0


Action Who should release? Who released?
1. main() creates buf buf→main()
2. main() calls a() with buf buf→a()
3. a() returns buf merely. buf→main()
4. main() calls b() with buf buf→b()
5. b() returns the copy of buf buf→b(), copy→main() b() releases buf
6. main() calls c() with copy copy→c()
7. c() swallows copy copy→c() c() releases copy


  • If a [sending] component is supposed to pass a reference-counted object to another [receiving] component, the sending component usually does not need to destroy it but defers that decision to the receiving component.
  • If a component consumes a reference-counted object and knows nothing else will access it anymore (i.e., does not pass along a reference to yet another component), the component should destroy it.


1.A(byteBuff)接受了byteBuff, 然后又传给了另外一个方法B(bytebuff),A方法内不用释放;

2.如果B(bytebuff)接受了byteBuff,没有再传递给其他方法,B负责release;


http://netty.io/wiki/reference-counted-objects.html

http://stackoverflow.com/questions/15781276/buffer-ownership-in-netty-4-how-is-buffer-life-cycle-managed



© 著作权归作者所有

共有 人打赏支持
greki
粉丝 99
博文 109
码字总数 45236
作品 0
杭州
技术主管
私信 提问
感悟优化——Netty对JDK缓冲区的内存池零拷贝改造

NIO中缓冲区是数据传输的基础,JDK通过ByteBuffer实现,Netty框架中并未采用JDK原生的ByteBuffer,而是构造了ByteBuf。 ByteBuf对ByteBuffer做了大量的优化,比如说内存池,零拷贝,引用计数(...

Janti
2018/07/12
0
0
netty的bytebuff内存泄露问题

如题,我使用netty的channelread函数读入mgs, ByteBuf in = (ByteBuf) msg; String message = in.toString(CharsetUtil.ISO_8859_1); 使用这样的语句会有问题么,求大神围观。...

xjman
2014/12/27
2.1K
6
简单谈谈服务间的连接

最近又把RPC框架的底层协议翻出来回顾了一遍,梳理一下有什么可以学习和借鉴的地方,重点看了一下RPC连接的实现方案。看了之后,觉得可以谈谈服务间连接的方式及区别,所以按照自己的理解写了...

谢东升Forest
2017/07/18
0
0
Android防止内存溢出浅析

Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M。但是Android采用的是Java语言编写,所以在很大程度上,Android的内存机制等同于Java的内存机制,在刚开始开发的时候,内存的...

长平狐
2012/09/03
295
1
netty 堆外内存泄露排查盛宴

点击上方“闪电侠的博客”,关注公众号 纯技术干货文章第一时间送达! 这篇文章对于排查使用了 netty 引发的堆外内存泄露问题,有一定的通用性,希望对你有所启发 背景 最近在做一个基于 we...

闪电侠的博客
2018/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
53分钟前
1
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部