java数组中的内存分配

时间:2012-09-14 19:59:43

标签: java arrays memory-management

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

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

那就是说,我强烈认为大多数实际的JVM都使用连续的内存。

答案 2 :(得分: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

答案 3 :(得分:0)

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

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

e.g。

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

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