.
简述
Java NIO 中提供了 DirectBuffer、MappedByteBuffer 以提高IO效率。
DirectBuffer
DirectBuffer 占用的是 堆外内存。JVM 会在 DirectBuffer 上直接使用 “本地IO操作”(Native I/O Operations)。
Buffer 的地址对“本地IO操作”非常关键。所以在操作 堆内Buffer 时,JVM需要将其数据先复制到一个堆外Buffer,让“本地IO操作”读写此堆外Buffer。
这样可以防止GC活动改变堆内Buffer地址的影响(寻址更简单)。
所以使用DirectBuffer可以避免额外的数据复制,提高IO效率。同时也可以降低GC的工作量。
当需要 容量较大 且 长期使用 的缓存时可考虑使用 DirectBuffer。当然也需要测试确定是否能获得性能提升。
Java代码
-
Byt