例子:
public class BufferTest {
private static final int BUFFER = 1024 * 1024 * 1024; // 1GB
public static void main(String[] args) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
System.out.println("直接内存分配完毕,请求指示");
Scanner scanner = new Scanner(System.in);
scanner.next();
System.out.println("直接内存开始释放!");
byteBuffer = null;
System.gc();
scanner.next();
}
}
读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如下图操作。
使用 IO,需要两份内存存储重复数据,效率低。
使用 NIO 时,如下图,操作系统划出的直接缓冲区可以被 Java 代码直接访问,只有一份。NIO 适合对大文件的读写操作。
原文:https://www.cnblogs.com/pensieve/p/13585920.html