【发布时间】:2012-08-12 01:58:44
【问题描述】:
是否可以创建一个二维 int 数组的数组,例如:
int n = 100;
int[][] [] a = new int[][] [n];
数组具有固定长度n,矩阵(二维数组)具有不同的非零大小(至少1 x 1)。
为了性能,我想将它存储在堆栈中,而不是:
ArrayList<int[][]> a = new ArrayList<int[][]>(n);
据我所知,它将存储在堆上。
【问题讨论】:
-
数组总是存储在堆中——至少在概念上是这样。它们是引用类型。 (非常聪明的 JVM 可能会执行逃逸分析,但您应该假设它将在堆上。)
-
如果您的数组进入集合,它们将不会存储在堆栈中。 Java可能尝试对此进行优化(link;请参阅答案底部的 Jon 的注释),但不是必须的。
-
建议,二维数组被高估了:使用长度*宽度的伪二维数组,使用
[x+(length*y)]访问 -
即使是像
int[] a = new int[5]这样的简单数组也会在堆上。好的,感谢您的信息,所以ArrayList是一个解决方案。 -
@TheZ:很有趣,很高兴看到[x*y]线性阵列优于二维阵列的原因..
标签: java performance multidimensional-array