java.nio.ByteBuffer.allocateDirect(0)会产生什么内存?

时间:2015-04-16 09:00:09

标签: java malloc bytebuffer

分配零长度缓冲区通常与实现有关 我知道malloc(0)返回NULL或可以安全释放的指针,这完全取决于实现。

然后,调用ByteBuffer.allocateDirect(0)时会发生什么? (我的意思是,在记忆中会发生什么?)
这个函数会分配一小块内存,比如libc malloc()吗?

1 个答案:

答案 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的内存。