allocate和directAllocate
区别在于内存分配的方式,allocate分配的内存在jvm管理范围内,directAllocate分配的内存则不是由jvm管理,可以理解成是类似C++那种分配的内存,大家一定会说那由directAllocate分配的内存即然不由jvm管理,那么他是如何释放的,虽然directAllocate分配的内存不由jvm管理但他所属的对像还是由jvm管理的(比如ByteBuffer这类型的对像),所以当对像消亡时就是这段内存释放的时候,至于为什么java要提供二种内存分配方式,由于java的内存不是直接由操作系统管理,所以当网络来了数据后,要到java里,首先是放到系统所能操作的内存然后再复制到java的内存中,如果这部分内存是由directAllocate分配的,就不用再复制一次了,这样就减少了内存复制的次数,当然directAllocate并不是万能的,要知道,在jvm之外分配内存本身是非常耗时的操作,所以并不是一定由directAllocate分配的内存就能提高性能,这要看具体的操作了,对于小数据量的传送就建议不要用directAllocate分配了,大家可以用allocate和directAllocate分配内存后通过调试看一下ByteBuffer对像的属性,可以清楚的看到由allocate分配的内存是由byte[]类型定义的,而由directAllocate分配的只提供了一个long型的数据,这个long型的数据就是一个C++指针的转换值,他指向的是这段内存的首地址。
分享到:
相关推荐
Android
使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
仿安卓ByteBuffer 完美组包、拆包
本文实例讲述了Android在JNI中使用ByteBuffer的方法。分享给大家供大家参考。具体如下: 一、ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时...
系统调用与库函数对于不同buffer size写文件效率对比
主要解决从流中获取数据,缓存,拆解,可用于TCP粘包问题
【IT十八掌徐培成】Java基础第26天-05.ByteBuffer-mark-pos-limit-cap-flip.zip
NULL 博文链接:https://chinaestone.iteye.com/blog/468138
ios-byteBuffer [![CI状态]( Lee / ios-byteBuffer.svg?style = flat)]( Lee / ios-byteBuffer ) 用法 #分配 ByteBuffer *buffer = [ByteBuffer initWithOrder: ByteOrderLittleEndian]; #输入数据 - ( ...
易语言汇编版ByteBuffer源码。主要用于各种网络协议的组包 具体用法可以点上面的网址 功能和jAVA的一样。@10371178。Tags:易语言汇编版ByteBuffer源码。
java中的中文乱码(其中介绍了中国近现代的汉字革命) java中为什么会产生中文乱码 如何解决java中的中文乱码
java api之ByteBuffer基础、应用场景、实战讲解 文档中有丰富的例子代码实现
protobuf+long+bytebuffer,利用protobuf.js实现编解码 所需的三个js库
易语言汇编版ByteBuffer源码主要用于各种网络协议的组包 具体用法可以点上面的网址 功能和jAVA的一样
dena-bytebuffer
原文:《Java NIO Scatter / Gather》 Scatter(分散):将一个 Channel 中的数据读取到多个 Buffer 中。...ByteBuffer header = ByteBuffer.allocate(128); ByteBuffer body = ByteBuffer
jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯
深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina的线程模型 深入理解Apache_Mina_(6)----_Java_Nio_ByteBuffer与Mina_ByteBuffer的区别(类图) 相信你们也愿意去...