public static ByteBuffer allocate(int capacity)
public static ByteBuffer allocateDirect(int capacity)
方法1从JVM进程的堆上分配内存,分配的ByteBuffer可被GC标记并回收;
方法2调用系统的native方法分配内存,分配的ByteBuffer对象不能被GC回收,需要
手工释放,使用这种内存进行I/O,好处就是buffer中的数据,不需要再由系统
内存拷贝到JVM内存中,而是被JAVA进程直接访问,节约了一步拷贝的过程。
性能比较:
可见在1MB的buffer大小下,directBuffer并没有明显的性能优势
应用场景:
ByteBuffer:
适用于大多数的场景,除非测试证明有性能问题,否则尽量使用此对象。
DirectBuffer:
当遇到性能瓶颈时考虑使用;
适用于作为访问频繁,且生命周期较长的缓存(猜测是申请时比较耗时,因为不适合频繁申请的场景);
The newI/O (NIO) classes in java.nio allow the creation and use of direct buffers. These bufferstremendou