-1

我想知道Java如何为数组分配内存:它是连续的还是不连续的?请给我一个合适的例子来证明这一点。

4

4 回答 4

4

没有办法说出来,因为即使使用 JNI 也会使您与实际实现隔离。

话虽如此,大多数实际的实现都将数组元素分配为连续的内部内存块,这可能是真的。

于 2012-09-14T20:03:02.713 回答
4

Java 规范不需要任何一种选择,实际上也没有提供观察任何一种选择的任何方式。

例如,如果我用 Javascript 编写 JVM,数组可能是不连续的。

也就是说,我强烈假设大多数实际的 JVM 确实使用连续内存。

于 2012-09-14T20:04:37.480 回答
0

Java 矩阵是数组的数组,例如第一行可以是 10 个元素,而第二行可以是 40 个元素。我认为不是方阵时它是不连续的。但是您可以确定在迭代最后一个索引块时它是连续的。

 a[100][500][64]

 a[5][5][0 to 63] contiguous

 a[5][0 to 5][5] not contiguous

 a[0 to 5][5][5] not contiguous and maybe there will be cache-critical stalls
于 2012-09-14T20:02:34.477 回答
0

在大多数 JVM 中,整个堆是连续的,因此您可以合理地假设数组是连续分配的。

注意:即使引用数组是连续的,但它们引用的对象可能在任何地方。他们可能会在一起,但他们可能不会是我。

例如

String[] strings = "a,b,c,d,e,f".split(",");

Strings 是一个引用数组,单个 String 对象及其char[]对象可以在任何地方。注意:所有字符串都可能使用相同的char[]

于 2012-09-14T20:14:29.983 回答