最近看到网上有些文章在讨论JAVA中普通文件IO读/写的时候经过了几次数据拷贝,如果从系统调用开始分析,以读取文件为例,数据的读取过程如下(以缓存I/O为例): 应用程序调用read函数发起系统调用,此时由用户空间切换到内核空间; 内核通过DMA从磁盘拷贝数据到内核缓冲区; 将内核缓冲区的数据拷贝到用户空间的缓冲区,回到用户空间; 整个读取过程发生了两次数据拷贝,一次是DMA将磁盘上的文件数据拷贝到内核缓冲区,一次是将内核缓冲区的数据拷贝到用户缓冲区. 在JAVA中,JVM划分了堆内存,平时创建…