<分区>
我想了解 C++ 和 Java 中数组的性能差异。我知道对于java中的对象数组,对象并没有连续存储在内存中,只有指向这些对象的指针是连续存储的。对于像 int 这样的原始类型呢?据我所知,JVM 不保证数组将连续存储。我基本上想知道 java 和 c++ 之间原始数组性能的主要区别是什么。边界检查是否也会降低 Java 中数组的速度?
标签 java c++ arrays performance
<分区>
我想了解 C++ 和 Java 中数组的性能差异。我知道对于java中的对象数组,对象并没有连续存储在内存中,只有指向这些对象的指针是连续存储的。对于像 int 这样的原始类型呢?据我所知,JVM 不保证数组将连续存储。我基本上想知道 java 和 c++ 之间原始数组性能的主要区别是什么。边界检查是否也会降低 Java 中数组的速度?
最佳答案
As far as I know the JVM doesn't guarantee that the array will be stored contiguously.
虽然我没有看到任何铸铁保证数组元素将连续存储,但我相信它们将用于每个主流实现。对于原始类型,原始值是直接存储的——而不是引用。据我所知,所有主流实现也都对数组进行打包——因此,例如,如果你有一个 byte[]
,它不会将每个字节对齐到 4 或 8 字节边界(因此将所需空间乘以 4 或 8)。但是 boolean[]
值不包含单个位(在我使用的实现中)- new boolean[n]
占用与 new byte 相同的空间[n]
.
关于java - Java 与 C++ 中的基元数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26312336/