gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:32 24 4
gpt4 key购买 nike

当我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com