在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式:

  1. public static ByteBuffer allocate(int capacity)
  2. public static ByteBuffer allocateDirect(int capacity)

为什么要提供两种方式呢?这与Java的内存使用机制有关。第一种分配方式产生的内存开销是在JVM中的,而另外一种的分配方式产生的开销在JVM之外,以就是系统级的内存分配。当Java程序接收到外部传来的数据时,首先是被系统内存所获取,然后在由系统内存复制复制到JVM内存中供Java程序使用。所以在另外一种分配方式中,能够省去复制这一步操作,效率上会有所提高。可是系统级内存的分配比起JVM内存的分配要耗时得多,所以并非不论什么时候allocateDirect的操作效率都是最高的。以下是一个不同容量情况下两种分配方式的操作时间对照:

 
由图能够看出,当操作数据量非常小时,两种分配方式操作使用时间基本是同样的,第一种方式有时可能会更快,可是当数据量非常大时,另外一种方式会远远大于第一种的分配方式。

ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。相关推荐

  1. ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别

    在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...

  2. ByteBuffer.allocate()与allocateDirect()的区别

    allocate()产生的是HeapByteBuffer的实例, 本质上是一个no direct buffer, allocateDirect()产生的是DirectByteBuffer的实例, 本质 ...

  3. ByteBuffer.allocate()/ByteBuffer.allocateDirect()/JNI DETECTED ERROR IN APPLICATION: jarray was NULL

    在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...

  4. NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  5. java nio rewind_NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  6. java中静态缓冲区,java中allocatedirect和allocate字节缓冲区的联系与区别

    一.字节缓冲区方法allocateDirect()和allocate()简介 当Java程序员在编写相应的Java应用时一般都不会用到字节,所以大家对byte字节的了解也是知之甚少,但是当我们随着工作 ...

  7. java rewind()_Java NIO Buffer的clear()、reset()、rewind()、flip()方法的区别

    Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类.capacity一旦初始化后就不会改变,其值一直为常量.在使用中我们一般使用Buffer的抽象子类 ...

  8. java bytebuffer 清空_Java ByteBuffer用法总结

    最近用SocketChannel进行网络编程比较多,中间也遇到了几个问题,出现的bug也主要来自于对于ByteBuffer的使用不当.现在终于调通了,对ByteBuffer及Socket网络编程也有了 ...

  9. 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别

    1.曾经写过很多自以为很通俗易懂的面向对象的解释. 如下是目前最通俗的一种解释: 2.Eclipse的补充解释. 运行的快捷键:F11. 3.Eclipse快捷键大全 大全放本文最后,这里主要放常用的 ...

最新文章

  1. mysql 冷热数据分离_elasticsearch冷热数据读写分离
  2. BLE GAP广播(Advertising Packet)格式
  3. EXE与SYS通信(其他模式)
  4. mybatis字符串转成数字_Python字符串三种格式化输出
  5. ETL异构数据源Datax_日期增量同步_13
  6. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
  7. 网络是怎样连接起来的
  8. DevOps Master凤凰项目沙盘总结:大美的DevOps总结
  9. 64 位下,dsoframer.ocx 注册时失败,错误代码为 0x80070005
  10. C语言输出一个菱形图案,最优方案,不需要分上下两部分输出
  11. Apache Pulsar 生态项目 KoP 新增 Maintainer:吴展鹏
  12. [译]如何打造以人为本的移动游戏
  13. mcnpf5输出结果_MCNP入门教程
  14. 【web可视化】canvas画图学习详细教程笔记完整代码
  15. 1255计算机网络 本,国家开放大学电大本科《计算机网络》2025期末试题及答案(试卷号:1255)...
  16. 3-PHP代码审计——PHPCMSV9.6.1文件下载漏洞
  17. 数据库中的触发器的实例讲解
  18. Dialog仿iphone风格
  19. 【服务器数据恢复】NetApp存储无法访问的数据恢复案例
  20. Android Studio音乐播放器and视频播放器

热门文章

  1. 信息增益比 vs 信息增益
  2. 关于[flv @ 00000248bab4c420] Tag avc1/0x31637661 incompatible with output codec id ‘28‘ ([7][0][0][0])
  3. Java基础学习之数据结构:利用栈和队列完成表达式解析
  4. python飞船游戏(四)
  5. mac 建立软链接_linux/mac系统的软链接文件与硬链接文件
  6. 串口Serial连接方式
  7. linux 安装xdebug
  8. python3之3Des加密
  9. 利用INF文件来修改注册表
  10. def convert_dummy(df,feature,rank=0): 是什么意思