当前位置: 首页 > news >正文

java nio中,HeapByteBuffer与DirectByteBuffer的区别

HeapByteBuffer,顾名思义,是写在jvm堆上面的一个buffer,底层的本质是一个数组,用类封装维护了很多的索引(limit/position/capacity等)

DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据

 

HeapByteBuffer优点:由于内容维护在jvm里,所以把内容写进buffer里速度会快些;并且,可以更容易回收

DirectByteBuffer优点:跟外设(IO设备)打交道时会快很多,因为外设读取jvm堆里的数据时,不是直接读取的,而是把jvm里的数据读到一个内存块里,再在这个块里读取的,如果使用DirectByteBuffer,则可以省去这一步,实现zero copy(零拷贝)

 

题外:外设之所以要把jvm堆里的数据copy出来再操作,不是因为操作系统不能直接操作jvm内存,而是因为jvm在进行gc(垃圾回收)时,会对数据进行移动,一旦出现这种问题,外设就会出现数据错乱的情况

转载于:https://www.cnblogs.com/billmiao/p/9872230.html

相关文章:

  • excel找到对应数据的列指标_python数据分析——医院销售数据实战案例
  • 二维数组元素的地址
  • 大话2烧法助手_大话西游2说出你自己的服务器名称,看看有没有一起玩耍的小伙伴...
  • 运行项目时报Server Tomcat v8.0 Server at localhost failed to start.
  • web安全
  • python 元组_python学习04-2:元组
  • python-day27--hashlib模块-摘要算法
  • 简述python执行原理_Python解释执行原理分析
  • 关于javascript 的reduce方法
  • python合法标识符_python合法标识符要求是什么
  • 不会英语学python_不会英语能不能学编程
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • 不同的电脑打印预览不同怎么解决_华为笔记本电脑怎么样?Matebook 14与Matebook 13的有哪些不同...
  • python 相对路径导入_从Python中的相对路径导入
  • css揭秘pdf
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • django开发-定时任务的使用
  • HTTP请求重发
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript异步流程控制的前世今生
  • JS笔记四:作用域、变量(函数)提升
  • PHP 7 修改了什么呢 -- 2
  • ReactNative开发常用的三方模块
  • React组件设计模式(一)
  • storm drpc实例
  • vue-router的history模式发布配置
  • WebSocket使用
  • 从零搭建Koa2 Server
  • 删除表内多余的重复数据
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 一个JAVA程序员成长之路分享
  • hi-nginx-1.3.4编译安装
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​一些不规范的GTID使用场景
  • #### go map 底层结构 ####
  • #define、const、typedef的差别
  • (Java数据结构)ArrayList
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)scrum常见工具列表
  • (转)树状数组
  • ***利用Ms05002溢出找“肉鸡
  • .Net CF下精确的计时器
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net FrameWork总结
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET业务框架的构建
  • .pyc文件是什么?
  • @AliasFor注解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka