java进阶:关于零拷贝、mmap 和ByteBuffer,你真的了解吗?

本文探讨了Java中的IO优化技术,包括零拷贝的概念,JDK如何通过减少上下文切换和数据拷贝提高效率。讲解了mmap技术以及ByteBuffer的三种实现,强调了DirectByteBuffer和MappedByteBuffer在性能与管理上的权衡。最后总结了高效IO技术的利弊,并推荐了一篇高并发编程的学习资源。
摘要由CSDN通过智能技术生成

1、传统IO底层发生了什么?为什么OS层面是相当昂贵的操作?

在这里插入图片描述

  1. JVM发送read()系统调用
  2. OS进行上下文切换到内核态,从socket buffer中读取数据。
  3. OS内核拷贝数据到user buffer,然后进行上下文切换,回到用户态,read()方法返回。
  4. JVM进程继续执行代码逻辑,然后发送write()系统调用。
  5. OS进行上下文切换到内核态,将user buffer的数据拷贝到socket buffer。
  6. OS进行上下文切换到用户态,write方法返回,JVM继续执行代码逻辑。

可以看到,一个简单的传统IO操作,涉及了4次上下文切换和2次数据拷贝,所以说这个效率是相当低下的。如果在并发要求极高的中间件系统中,这样的效率是无法容忍的。


2、JDK是如何优化传统的IO操作,实现zero-copy效果的?

zero-copy的意思是不会将数据从内核态拷贝到用户态,而非不进行数据拷贝。

在这里插入图片描述
之所以内核态还会发生

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值