如何理解两者之间的效率高,主要是从allocate()方法和allocateDirect()这两个方法的源码进行分析

文章目录

  • 1.直接缓冲区的底层创建源码
  • 2.非直接缓冲区的底层创建源码
  • 3.非直接缓冲区与直接缓冲区的具体实现

1.直接缓冲区的底层创建源码

直接缓冲区的创建通过allocateDirect()方法实现


可以看出它主要是通过DirectByteBuffer类来实现的(通过DirectByteBuffer直接操作Native内存

通过这个构造函数可以看出它主要是通过UNSAFE类实现分配的,那么UNSAFE类是干什么呢?它是用来在堆外分配内存空间的。

2.非直接缓冲区的底层创建源码

非直接缓冲区通过allocate()工厂方法进行分配空间

它是如何分配的呢?查看源码分析
可以看出它通过HeapByteBuffer类来实现的。

在它的底层new了一个byte[cap]数组来存储数据,所以说它的本质上就是底层维护了一个字节数组,既然是使用new关键字,那么肯定是在JVM的堆区中创建的。

3.非直接缓冲区与直接缓冲区的具体实现

磁盘属于操作系统层面的,而我们的应用程序是在用户态下运行的(应用程序没权限直接访问);所以JVM与磁盘的交互需要在用户态和内核态之间进行切换。

非直接缓冲区
可以看出与磁盘的交互需要经过两次copy,这样一来效率就会降低。

直接缓冲区
通过直接创建物理内存映射了内核地址空间和用户地址空间,使得与磁盘交互少去了那两次copy操作,提高了效率;

通常来说使用直接缓冲区是优于非直接缓冲区的。直接缓冲适用于大文件、频繁读写的场合。

深入浅出在NIO技术中,如何理解直接缓冲区要比非直接缓冲区效率高?相关推荐

  1. 智能合约在区块链溯源技术中的应用及未来发展:提升企业运营效率

    作者:禅与计算机程序设计艺术 智能合约在区块链溯源技术中的应用及未来发展:提升企业运营效率 引言 随着互联网.物联网.区块链等技术的快速发展,企业运营效率也逐渐有了很大的提高.特别是在区块链技术的作用 ...

  2. JAVA NIO知识点总结(2)——直接缓冲区和非直接缓冲区

    2019独角兽企业重金招聘Python工程师标准>>> 前面我们一直说NIO能够提高性能,那么到底如何提高效率.本篇就接着上一篇文章的缓冲区,来看看直接缓冲区和非直接缓冲区. 非直接 ...

  3. java nio技术_攻破JAVA NIO技术壁垒

    现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.再者,现在互联网的面 ...

  4. 在实践中深入理解IP协议

    本文为我个人计划撰写的博客专题<在实践中深入理解常见网络协议>中关于IP协议的一篇,有兴趣的朋友可以继续关注我的博客,我将会陆续撰写各种协议的实践分析文章. TCP/IP协议栈其实当然不止 ...

  5. NLP技术中的Tokenization

    ©作者 | Gam Waiciu 单位 | QTrade AI研发中心 研究方向 | 自然语言处理 前言 今天我们来聊一聊 NLP 技术中的 Tokenization.之所以想要聊这个话题,是因为,一 ...

  6. 计算机科学与技术排名中澳合作,计算机科学与技术(中澳合作)2018培养方案.docx...

    计算机科学与技术(中澳合作办学) (专业代码:8053) -.专业简介 计算机科学与技术专业(中澳合作办学)由我校与澳大利亚国立大学联合培养,有2+2模式 (两年国内,两年澳大利亚国立大学)和4+0模 ...

  7. 阿里道延:我对技术架构的理解与架构师角色的思考

    我叫道延, 2014 年加入阿里,在阿里通信工作了近两年.2016 年年底加入业务平台团队,当时 Leader 找我的第一件事就是要解决大促的问题,第二件事就是解决安全生产的问题. 我带着这个命题进入 ...

  8. 博客专题计划:《在实践中深入理解常见网络协议》

    为什么要写这个系列的技术博文: 距离学习CCIE的课程已经有近一年的时间,虽然这一年来已经丢下了挺多关于路由交换技术的知识,不过随着这一年时间以来通过对Linux和Python的学习研究和学校相关课程 ...

  9. 认识队列技术中的硬件队列和软件队列及如何改变硬件队列长度

    认识队列技术中的硬件队列和软件队列及如何改变硬件队列长度 队列技术      路由器或者交换机的数据发送,必须依赖于队列(queue),这是一个什么样的概念呢?首先从生活中打个比喻:有很多人在公交车站 ...

最新文章

  1. 利用sort对多字段排序
  2. 独家|华为进行组织架构调整 CloudAI升至第四大BG
  3. AI+视频分析:实时监测无处不在的安全风险
  4. 在SpringBoot的Web项目中使用于Thymeleaf(二)
  5. 优先队列如何按照pair 的第二关键字排序(对比vector按照pair第二关键字排序)
  6. 源码分析shiro认证授权流程
  7. linux 进程综合指令
  8. android实现手机拍照以及图片预览功能_手机系统将有A/B分区?Android 11这些变化你关注过吗...
  9. Yam旗下Degenerative Finance明日将上线uSTONKS和uGAS奖励计划
  10. php删除双引号,PHP引号前添加反斜杠、去除反斜杠的方法
  11. 个人所得税计算及多人避税问题
  12. mybatis中#{}和${}
  13. 在修改css特效时,需要注意的问题。(对寄存的影响,引用的位置)
  14. 跳过授权列表--skip-grant-list--案例
  15. Latex数学公式表
  16. 关于青果教务系统一点小研究
  17. L. Simone and graph coloring
  18. 生物识别技术是什么,生物识别技术的比较介绍
  19. MJiOS底层笔记--OC对象本质
  20. 数据可视化分析2015-2017年世界幸福指数

热门文章

  1. 搜索推荐系统根据用户搜索频率(热搜)排序
  2. Hadoop安装过程
  3. 5. Binary Tree Postorder Traversal
  4. 排序算法_桶排序(箱排序)
  5. linux 内核修改rss,linux 内核参数 rss
  6. oracle maa全称,OracleMAA参考架构.PDF
  7. flink file sink
  8. 拆分文件_领导让把工作表拆分每个文件,我花半个小时,同事1分钟搞定了
  9. java 微商城开发_Java网上商城系统可以开微信商城吗
  10. java构造方法重载_Java 重载、重写、构造函数的实例详解