开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ByteBuffer中allocate 与allocatDirect 不同之处?

简介:
+关注继续查看

在NIO中,使用ByteBuffer分配缓存区的方式有哪些?


一、创建Buffer对象的方式?

1、JVM堆中分配内存,

2、也可以OS本地内存中分配,由于本地缓冲区避免了缓冲区复制,在性能上相对堆缓冲区有一定优势,但同时也存在一些弊端。

二、两种缓冲区对应的API如下:

1、JVM堆缓冲区:ByteBuffer.allocate(size)

2、本地缓冲区:ByteBuffer.allocateDirect(size)//属于系统级的内存开销,就是操作系统直接分配的

三、ByteBuffer对象的垃圾回收策略?

1、从堆中分配的缓冲区为普通的Java对象,生命周期与普通的Java对象一样,当不再被引用时,Buffer对象会被回收。

2、直接缓冲区(DirectBuffer)为本地内存,并不在Java堆中,也不能被JVM垃圾回收。由于直接缓冲区在JVM里被包装进Java对象DirectByteBuffer中,当它的包装类被垃圾回收时,会调用相应的JNI方法释放本地内存,所以本地内存的释放也依赖于JVMDirectByteBuffer对象的回收。

 

由于垃圾回收本身成本较高,一般JVM在堆内存未耗尽时,不会进行垃圾回收操作。我们知道在32位机器上,每个进程的最大可用内存为4G,用户可用内存在大概为3G左右,如果为堆分配过大的内存时,本地内存可用空间就会相应减少。当我们为堆分配较多的内存时,JVM可能会在相当长的时间内不会进行垃圾回收操作,从而本地内存不断分配,无法释放,最终导致OutOfMemoryError

 

四、总结:

1、堆缓冲区的性能已经相当高,若无必要,使用堆缓冲区足矣。若确实有提升性能的必要时,再考虑使用本地缓冲区。

2、JVM分配堆内存时,并不是越大越好,堆内存越大,本地内存就越小,根据具体情况决定,主要针对32位机器,64位机器上不存在该问题。














本文转自故新51CTO博客,原文链接:http://blog.51cto.com/xingej/1967948 ,如需转载请自行联系原作者













版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java----String、StringBuffer、StringBuilder
String、StringBuffer、StringBuilder的区别
22 0
【前端知乎系列】ArrayBuffer 与 Blob对象
【前端知乎系列】ArrayBuffer 与 Blob对象
55 0
DirectByteBuffer内存释放
DirectByteBuffer内存释放
35 0
Java String StringBuffer StringBuilder
本文目录 1. String保存的字符常量不可改变 2. StringBuffer可以修改保存的内容 3. StringBuffer与StringBuilder 1. String保存的字符常
29 0
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
之前看到一篇文章说epoll中在维护epoll句柄数据结构时使用到了mmap的技术,但是后来看了其他文章以及epoll源码后发现好像并没有用到这个技术。
1589 0
[Java]String、StringBuilder和StringBuffer
String final 修饰,不可变 StringBuilder 非线程安全、不使用多线程的情况下,效率高 StringBuffer 线程安全 ...
534 0
Java NIO源码分析之Buffer
        Java NIO的主要读写处理逻辑就是将数据从通道读入缓冲区,从缓冲区写入到通道中。而这个数据缓冲区的基类就是Buffer。而Buffer本质上就是一块可读写数据的内存,其提供了一些方法,方便外部调用者访问这块内存进行数据读写操作。
774 0
Java NIO Buffer
Java Nio  1 Java NIO Tutorial 2 Java NIO Overview 3 Java NIO Channel 4 Java NIO Buffer 5 Java NIO Scatter / Gather 6 Java NIO Channel t...
695 0
+关注
10137
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载