深入浅出在NIO技术中,如何理解直接缓冲区要比非直接缓冲区效率高?
如何理解两者之间的效率高,主要是从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技术中,如何理解直接缓冲区要比非直接缓冲区效率高?相关推荐
- 智能合约在区块链溯源技术中的应用及未来发展:提升企业运营效率
作者:禅与计算机程序设计艺术 智能合约在区块链溯源技术中的应用及未来发展:提升企业运营效率 引言 随着互联网.物联网.区块链等技术的快速发展,企业运营效率也逐渐有了很大的提高.特别是在区块链技术的作用 ...
- JAVA NIO知识点总结(2)——直接缓冲区和非直接缓冲区
2019独角兽企业重金招聘Python工程师标准>>> 前面我们一直说NIO能够提高性能,那么到底如何提高效率.本篇就接着上一篇文章的缓冲区,来看看直接缓冲区和非直接缓冲区. 非直接 ...
- java nio技术_攻破JAVA NIO技术壁垒
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.再者,现在互联网的面 ...
- 在实践中深入理解IP协议
本文为我个人计划撰写的博客专题<在实践中深入理解常见网络协议>中关于IP协议的一篇,有兴趣的朋友可以继续关注我的博客,我将会陆续撰写各种协议的实践分析文章. TCP/IP协议栈其实当然不止 ...
- NLP技术中的Tokenization
©作者 | Gam Waiciu 单位 | QTrade AI研发中心 研究方向 | 自然语言处理 前言 今天我们来聊一聊 NLP 技术中的 Tokenization.之所以想要聊这个话题,是因为,一 ...
- 计算机科学与技术排名中澳合作,计算机科学与技术(中澳合作)2018培养方案.docx...
计算机科学与技术(中澳合作办学) (专业代码:8053) -.专业简介 计算机科学与技术专业(中澳合作办学)由我校与澳大利亚国立大学联合培养,有2+2模式 (两年国内,两年澳大利亚国立大学)和4+0模 ...
- 阿里道延:我对技术架构的理解与架构师角色的思考
我叫道延, 2014 年加入阿里,在阿里通信工作了近两年.2016 年年底加入业务平台团队,当时 Leader 找我的第一件事就是要解决大促的问题,第二件事就是解决安全生产的问题. 我带着这个命题进入 ...
- 博客专题计划:《在实践中深入理解常见网络协议》
为什么要写这个系列的技术博文: 距离学习CCIE的课程已经有近一年的时间,虽然这一年来已经丢下了挺多关于路由交换技术的知识,不过随着这一年时间以来通过对Linux和Python的学习研究和学校相关课程 ...
- 认识队列技术中的硬件队列和软件队列及如何改变硬件队列长度
认识队列技术中的硬件队列和软件队列及如何改变硬件队列长度 队列技术 路由器或者交换机的数据发送,必须依赖于队列(queue),这是一个什么样的概念呢?首先从生活中打个比喻:有很多人在公交车站 ...
最新文章
- 利用sort对多字段排序
- 独家|华为进行组织架构调整 CloudAI升至第四大BG
- AI+视频分析:实时监测无处不在的安全风险
- 在SpringBoot的Web项目中使用于Thymeleaf(二)
- 优先队列如何按照pair 的第二关键字排序(对比vector按照pair第二关键字排序)
- 源码分析shiro认证授权流程
- linux 进程综合指令
- android实现手机拍照以及图片预览功能_手机系统将有A/B分区?Android 11这些变化你关注过吗...
- Yam旗下Degenerative Finance明日将上线uSTONKS和uGAS奖励计划
- php删除双引号,PHP引号前添加反斜杠、去除反斜杠的方法
- 个人所得税计算及多人避税问题
- mybatis中#{}和${}
- 在修改css特效时,需要注意的问题。(对寄存的影响,引用的位置)
- 跳过授权列表--skip-grant-list--案例
- Latex数学公式表
- 关于青果教务系统一点小研究
- L. Simone and graph coloring
- 生物识别技术是什么,生物识别技术的比较介绍
- MJiOS底层笔记--OC对象本质
- 数据可视化分析2015-2017年世界幸福指数
热门文章
- 搜索推荐系统根据用户搜索频率(热搜)排序
- Hadoop安装过程
- 5. Binary Tree Postorder Traversal
- 排序算法_桶排序(箱排序)
- linux 内核修改rss,linux 内核参数 rss
- oracle maa全称,OracleMAA参考架构.PDF
- flink file sink
- 拆分文件_领导让把工作表拆分每个文件,我花半个小时,同事1分钟搞定了
- java 微商城开发_Java网上商城系统可以开微信商城吗
- java构造方法重载_Java 重载、重写、构造函数的实例详解