分配零长度缓冲区通常与实现有关
我知道malloc(0)
返回NULL或可以安全释放的指针,这完全取决于实现。
然后,调用ByteBuffer.allocateDirect(0)
时会发生什么?
(我的意思是,在记忆中会发生什么?)
这个函数会分配一小块内存,比如libc malloc()吗?
答案 0 :(得分:3)
是的,当ByteBuffer.allocateDirect(int capacity)
返回new DirectByteBuffer(capacity)
时,DirectByteBuffer(int capacity)
构造函数会分配一个大小为Math.max(1L, (long)capacity + (pa ? ps : 0));
的内存,其中
' PA'是VM.isDirectMemoryPageAligned()
和' ps'是pagesize。您可以按照第110行http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/DirectByteBuffer.java#110
因此,ByteBuffer.allocateDirect(0)
会创建大小至少为1的内存。