单个阵列比2个不同阵列更快吗?

Bus*_*sti 5 java arrays performance

我想知道让一个数组存储某种数据比存储相同信息的多个数组更有效.

int a1;
int a2;
int b1;
int b2;

int array1[] = {a1, b1, a2, b2}; // Is this faster than 2 arrays?

int array2A[] = {a1, a2};
int array2B[] = {b1, b2};
Run Code Online (Sandbox Code Playgroud)

Tob*_*ias 4

实例化

好吧,你可以争论这个。实例化array1需要 3 个字节码指令 ( bipush, newarray, astore),实例化每个数组array2X需要 3 个字节码指令( / , , )。从理论上讲,实例化可能会更快。bipushiconstnewarrayastorearray1

使用权

这就是虚拟机所做的array1[2]

aload_1  ; array1
iconst_2 ; index
iaload   ; value
Run Code Online (Sandbox Code Playgroud)

猜猜它会做什么array2B[0]

aload_3  ; array2B on stack
iconst_0 ; index
iaload   ; value
Run Code Online (Sandbox Code Playgroud)

任何人都没有积分。

记忆

数组的大小相等(与+array1一样大),至少是内容的大小。是的,有两个指针而不是一个,还有一些 GC 开销等等。不要想太多,你将无法衡量差异。array2Aarray2B

缓存

访问两个不同的对象显然会更慢。这个就不多说了。一个对象绝对是更好的选择。

变量访问和堆栈

使用单个数组可能会提高整体性能,因为它有时可以保留在堆栈上。然而,JDK 编译器似乎避免了堆栈操作并回退到变量。

结论

不会有明显的差异(尽管array1通常会更快)。以上所有点都取决于VM 的实现。

编写好的代码,不要过度优化。