【IO】- 关于ByteBuffer的一点认识
我们经常使用ByteBuffer。
通俗的Non-DerictedByteBuffer结构如下
HeapByteBuffer extends ByteBuffer {
Byte[] array;
int pos,limit,cap,mark;
}
通俗的DirectByteBuffer结构如下
DirectByteBuffer extends ByteBuffer {
int address;
int pos,limit,cap,mark;
}
可见直接缓冲使用的是JNI的一个内存地址,因此在释放Buffer时,通过gc是无法释放的,需要JNI。
DirectByteBuffer 的好处是什么呢?
一般的nonDirectBuffer-socket通讯过程中需要,socket -> DirectByteBuffer -> UserheapByteBuffer -> DirectByteBuffer -> socket
因此需要2次copy. copy本身不耗费多长时间,但是建立DirectByteBuffer的时间比较久(JNI调用)。而是用DirectByteBuffer的通讯过程如下
socket -> UserDirectByteBuffer -> socket 可见基本是0-copy (如netty中的compositeBuffer)。
而且在做socketChannel中的
write(ByteBuffer) 和 read(ByteBuffer) 两个方法中 sun的实现已经缓存了所需要的DirectByteBuffer
而 write(ByteBUffer[]) 和 read(ByteBuffer[]) 这种聚集Buffer操作则每次都需要大量时间重新创建DirectByteBuffer
因此当网络IO规模大的时候建议使用DirectBuffer,其他一般情况使用NonDirectBuffer即可。
【IO】- 关于ByteBuffer的一点认识的更多相关文章
- 小师妹学IO系列文章集合-附PDF下载
目录 第一章 IO的本质 IO的本质 DMA和虚拟地址空间 IO的分类 IO和NIO的区别 总结 第二章 try with和它的底层原理 简介 IO关闭的问题 使用try with resource ...
- 简单聊下IO复用
没图,不分析API Java中IO API的发展:Socket -> SocketChannel -> AsynchronousSocketChannelServerSocket -> ...
- 通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 这篇文章由巴拉克·梅里莫维奇撰写. 总结我自己有关Openstack的各种骚操作先告一段落.这一次我想谈谈有关监控云服务的使用情况. 我个人使用 ...
- 《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步IO
同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测.虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序. 同步IO时,发出IO请求 ...
- 高级Java面试总结3
1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...
- 33.2.NIO
4.1概述[理解] BIO Blocking IO,阻塞型IO NIO No Blocking IO,非阻塞型IO 阻塞IO的弊端 在等待的过程中,什么事也做不了 非阻塞IO的好处 不需要一直等待,当 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Netty In Action
1 introduction 1.2 Asynchronous by design two most common ways to work with or implement an asynchro ...
- 缓解 SQL Server has encountered 727 occurrence(s) of I/O requests taking longer than 15 seconds
sql server 会记录IO等待时间超过15 seconds的请求,这时application会有 time out 现象,dba需要判断是workload,concurrecy 所致还是sql ...
随机推荐
- MS SQL Server2012中的EOMONTH函数
MS SQL Server2012中的EOMONTH函数 这个函数是获取一个指定日期所在月份最后一天的日期.可以得到某一个月月份的最后一天 如: declare @orderdate date=' ...
- 为什么选择使用Spring Cloud而放弃了Dubbo
为什么选择使用Spring Cloud而放弃了Dubbo 可能大家会问,为什么选择了使用Dubbo之后,而又选择全面使用Spring Cloud呢?其中有几个原因: 1)从两个公司的背景来谈:Dubb ...
- QWidget切换
QWidget切换,参考类:QstackedLayout,QStackedWidget,QTabWidget 一.Tab出现的位置 tabWidget.setTabPosition(QTabWidge ...
- PHPExcel导出插入图片和居中问题
首先到网上先下载PHPExcel 下载后解压得到这两个文件 下载后引用该文件 最后编写相关代码: 首先是图片插入导出 $objDrawing = new PHPExcel_Worksheet_Draw ...
- ChemDraw使用不了怎么办
ChemDraw作为一款专业级的化学绘图软件,不仅可以帮助用户绘制图像在数据计算方面也起了很大作用,因此,ChemDraw非常受用户的欢迎.但是我们在使用过程中难免会遇到各种问题,特别是对于新手用户, ...
- React Native开发技术
http://www.lcode.org/react-native-week-issue22/
- PHP正则表达式 /i, /s, /x,/u, /U, /A, /D, /S等模式修饰符
i (PCRE_CASELESS) 如果设置了这个修饰符, 模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下, PCRE认为目标字符串是由单行字符组成的(然而实际 ...
- sap screen design
定义屏幕: SAP 系统中的屏幕包含: 标准屏幕: 选择屏幕: 列表输出屏幕: 1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP ...
- Hadoop1.2.1 启停的Shell 脚本分析
停止shell脚本以此类推.
- 数据库为什么要用B+树结构--MySQL索引结构的实现(转)
B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘上 2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/ ...