Se *_*orm 11 java buffer initialization
当我用Java初始化数组时:
float[] array = new float[1000];
Run Code Online (Sandbox Code Playgroud)
所有元素都初始化为0.当我分配这样的直接缓冲区时也是如此:
FloatBuffer buffer = ByteBuffer.allocateDirect(4*1000).asFloatBuffer();
Run Code Online (Sandbox Code Playgroud)
?我似乎总是只得到零,但也许它依赖于实现......
看起来答案是可能的。
查看 的实现ByteBuffer,它DirectByteBuffer在幕后使用。查看Android的实现源代码,它有这样的评论:
在新分配的 OS 内存上构造给定容量的新直接字节缓冲区。记忆将被归零。
因此,当您分配缓冲区时,所有内存内容都将被初始化为零。oracle 实现也执行此归零。
不过,这是一个实现细节。由于 javadoc 没有说明归零,因此依赖它在技术上是不正确的。正确地说,您应该自己将缓冲区归零。在实践中,如果您出于某种原因真的担心性能,您可以忽略它,但要注意 JVM 的某些实现可能不会执行此归零。
从父抽象类Buffer的介绍来看:
缓冲区的初始内容通常是undefined。
在没有任何相反情况的情况下,我假设这适用于 ByteBuffer.allocateDirect() 分配的缓冲区。有趣的是,我认为严格来说它也适用于普通的数组支持的缓冲区,尽管在 Java 数组的分配中隐含着数组将被清零。
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |