java - Java中的直接缓冲区是否像数组一样初始化为默认值?

标签 java initialization buffer

当我在 Java 中初始化一个数组时:

float[] array = new float[1000];

所有的元素都初始化为0。我这样直接分配buffer是不是也是这样:

FloatBuffer buffer = ByteBuffer.allocateDirect(4*1000).asFloatBuffer();

?我似乎总是只得到零,但也许它取决于实现......

最佳答案

看起来答案是可能

查看 ByteBuffer 的实现,它在底层使用了 DirectByteBuffer。查看实现 source code Android,它有这样的评论:

Constructs a new direct byte buffer of the given capacity on newly allocated OS memory. The memory will have been zeroed.

因此,当您分配缓冲区时,所有内存内容都将被初始化为零。 oracle 实现也执行此归零操作。

不过这是一个实现细节。由于 javadoc 没有说明归零,因此依赖它在技术上是不正确的。正确地说,您应该自己真正将缓冲区归零。在实践中,如果您出于某种原因真的担心性能,您可以将其省略,但请注意,JVM 的某些实现可能不会执行此归零操作。

关于java - Java中的直接缓冲区是否像数组一样初始化为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564361/

相关文章:

java - 如何从 Amazon S3 读取大文件?

OpenGL : How to set up OpenGL to just render to a FBO, 没有输出到屏幕/窗口/控件?

java - 初始化 block 上的注释????静态与否

c# - c#中的声明是分配内存还是分配内存的新运算符?

c++ - QCanBusDevice 缓冲区刷新

C# UDP 发送缓冲区

java - 并发更新同一个集契约(Contract)一个文档

java - JasperReport 报表中的 Excel 单元格格式

java - Arquillian Cube 基本示例/教程 JMX 远程访问超时

c++ - 应该为传感器读数的串行通信选择什么缓冲区大小?