我想知道Java如何为数组分配内存:它是连续的还是不连续的?请给我一个合适的例子来证明这一点。
问问题
2815 次
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 回答