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 的内存。
分配零长度缓冲区通常取决于实现。
我知道 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 的内存。