之前我们看出来了直接内存和传统IO操作的区别,我们针对底层流程加以说明。
BybeBuffer方式
如图所示,我们一般的IO读取过程时,程序需由用户态切换成内核态,当从ByteBuffer中读取数据时,系统会先从磁盘把文件读取到系统内存区,再从系统内存读取到Java堆内存,需要多一次内存拷贝过程。
Direct Memory方式
Direct Memory方式情况下,Java程序会直接从系统内存中开辟一块内存空间,对应的是我们的ByteBuffer.allocateDirect(_256M);这句代码,这部分内存系统内存可以访问,Java程序也可以直接访问,直接就减少了交互过程,这个就是直接内存会工作快点的原因。