- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java直接(堆外)内存使用详解
本篇主要讲解如何使用直接内存(堆外内存),并按照下面的步骤进行说明:相关背景--读写操作--关键属性--读写实践--扩展--参考说明希望对想使用直接内存的朋友,提供点快捷的参考。数据类型下面这些,都是在使用DirectBuffer中必备的一些常识,暂作了解吧!如果想要深入理解,可以看看下面参考的那些博客。基本类型长度在Java中有很多的基本类型,比如:byte,一个字节是8位bit,也就是1Bshort,16位bit,也就是2Bint,32位bit,也就是4Blong, 64位bit,也就是8Bchar,16位bit,也就是2Bfloat,32位bit,也就是4Bdouble,64位bit,也就是8B不同的类型都会按照自己的位数来存储,并且可以自动进行转换提升。byte、char、short都可以自动提升为int,如果操作数有long,就会自动提升为long,float和double也是如此。大端小端由于一个数据类型可能有很多个字节组成的,那么它们是如何摆放的。这个是有讲究的:大端:低地址位 存放 高有效字节小端:低地址位 存放 低有效字节举个例子,一个char是有两个字节组成的,这两个字节存储可能会显示成如下的模样,比如字符a: 低地址位 高地址位大端; 00 96小端: 96 00String与new String的区别再说说hello和new String(hello)的区别:如果是hello,JVM会先去共享的字符串池中查找,有没有hello这个词,如果有直接返回它的引用;如果没有,就会创建这个对象,再返回。因此,a+b相当于存在3个对象,分别是a、b、ab。而new String(hello),则省去了查找的过程,直接就创建一个hello的对象,并且返回引用。读写数据在直接内存中,通过allocateDirect(int byte_length)申请直接内存。这段内存可以理解为一段普通的基于Byte的数组,因此插入和读取都跟普通的数组差不多。只不过提供了基于不同数据类型的插入方法,比如:put(byte) 插入一个byteput(byte[]) 插入一个byte数组putChar(char) 插入字符putInt(int) 插入IntputLong(long) 插入long等等….详细的使用方法,也可以参考下面的图片:对应读取数据,跟写入差不多:注意所有没有index参数的方法,都是按照当前position的位置进行操作的。下面看看什么是position,还有什么其他的属性吧!基本的属性值它有几个关键的指标:mark--position--limit--capacity另外,还有remaining=limit-position。先说说他们的意思吧!当前位置——positionposition是当前数组的指针,指示当前数据位置。举个例子:ByteBuffer buffer = ByteBuffer.allocateDirect(1024);buffer.putChar(a);System.out.println(buffer);buffer.putChar(c);System.out.println(buffer);buffer.putInt(10);System.out.println(buffer);由于一个char是2个字节,一个Int是4个字节,因此position的位置分别是:2,4,8注意,Position的位置是插入数据的当前位置,如果插入数据,就会自动后移。也就是说,如果存储的是两个字节的数据,position的位置是在第三个字节上,下标就是2。java.nio.DirectByteBuffer[pos=2 lim=1024 cap=1024]java.nio.DirectByteBuffer[pos=4 lim=1024 cap=1024]java.nio.DirectByteBuffer[pos=8 lim=1024 cap=1024]position可以通过position()获得,也可以通过position(int)设置。//position(int)方法的源码public final Buffer position(int newPosition) { if ((newPosition limit) || (newPosition 0)) throw new IllegalArgumentException(); position = newPosition; if (mark position) mark = -1; return this; }注意:position的位置要比limit小,比mark大空间容量——capacityca
您可能关注的文档
最近下载
- 3.1数据编码教学设计.docx VIP
- 2025黑龙江建筑职业技术学院单招《数学》常考点试卷含答案详解(完整版).docx VIP
- 高考语文复习古代诗歌阅读边塞征戍类专题练习合集.docx VIP
- 一种JNK激酶的相变探针及其应用.pdf VIP
- (高清版)DB37∕T 1830-2011 文登奶山羊饲养管理技术规程.pdf VIP
- 一方出地一方出资金的投资合作协议模板.docx VIP
- 第二单元 第1课《吉祥剪纸》课件【桂美版】美术 七年级上册.pptx VIP
- Joyoung 九阳 开水煲 K17D-WY170使用说明书.pdf
- 2025年认证行业法律法规及认证基础知识试题(附答案).docx VIP
- 2024年高考语文复习:古代诗歌边塞征戍类对比阅读练习题汇编(含答案解析).docx VIP
文档评论(0)