java.nio.ByteBuffer.allocateDirect(0) 会产生什么记忆?

What would java.nio.ByteBuffer.allocateDirect(0) result in memory?

分配零长度缓冲区通常取决于实现。
我知道 malloc(0) returns 要么是 NULL 要么是一个可以安全释放的指针,这完全取决于实现。

那么调用ByteBuffer.allocateDirect(0)会怎样呢?
(我的意思是,记忆中会发生什么?)
这个函数会像 libc malloc() 那样分配一小块内存吗?

是的,因为 ByteBuffer.allocateDirect(int capacity) returns new DirectByteBuffer(capacity)DirectByteBuffer(int capacity) 构造函数分配大小为 Math.max(1L, (long)capacity + (pa ? ps : 0)); 的内存,其中 'pa' 是 VM.isDirectMemoryPageAligned(),'ps' 是页面大小。您可以关注第 110 行 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/DirectByteBuffer.java#110

因此,ByteBuffer.allocateDirect(0)创建大小至少为 1 的内存。