概述
nio的零拷贝并不是实际意义上的零拷贝而是指jvm由用户空间到内核空间实现的零拷贝。
user space :用户空间
Kernel space: 内核空间
Hardware: 储存空间 可看作时硬盘
下图为普通的io模型
由图可见在普通io模型中会先从jvm中发送read()的本地方法之后用户空间模式转为内核空间模式之后由内核空间发起对硬盘数据的访问并复制到内核空间 之后内核空间将数据复制到用户空间 jvm通过操作用户空间内存进行对数据的访问或者修改后 将用户空间数据复制到内核空间 由内核空间将数据保存的硬盘中最后操作结果回调。
Nio模型
由上图可见nio模型中在内核空间中拷贝了一份目标数据文件后再拷贝了一次作为 socketchannel所对应的buffer中去 从而实现了内核到用户空间的零拷贝。也减少了由用户空间模式到内核空间模式的次数。
内存文件映射(Mapbytebuffer)
通过内存映射文件可以直接将文件数据映射到内核空间并且在用户空间可以操作内核空间中的这个内存映射。