NIO,使用native 函数库直接分配堆外内存,不经过JVM 内存直接访问系统物理内存的类——DirectBuffer。DirectBuffer 类继承自ByteBuffer,但和普通的ByteBuffer 不同,普通的ByteBuffer 仍在JVM 堆上分配内存,其最大内存受到最大堆内存的限制;而DirectBuffer 直接分配在物理内存中,并不占用堆空间,其可申请的最大内存受操作系统限制。
堆内存比较:
- 直接内存申请空间耗费更高的性能,当频繁申请到一定量时尤为明显
- 直接内存IO 读写的性能要优于普通的堆内存,在多次读写操作的情况下差异明显