Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java数组中的内存分配_Java_Arrays_Memory Management - Fatal编程技术网

java数组中的内存分配

java数组中的内存分配,java,arrays,memory-management,Java,Arrays,Memory Management,我想知道Java如何为数组分配内存:是连续的还是非连续的? 请给我一个合适的例子来证明这一点。Java矩阵是数组的数组,例如第一行可以是10个元素,而第二行cen可以是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 mayb

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

Java矩阵是数组的数组,例如第一行可以是10个元素,而第二行cen可以是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

没有办法判断,因为即使使用JNI也会将您与实际实现隔离开来


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

Java规范不需要任何一种选择,事实上也不提供任何观察任何一种选择的方法

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

 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

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

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

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

e、 g


字符串是一个引用数组,单个字符串对象及其
char[]
对象可以位于任何位置。注意:所有的字符串都可能使用同一个代码> char [< /Calp>

……我假设你在问之前已经做了详尽的研究,因为我可以证明内存分配在C,C++中是连续的,但是我不能证明它是连续的。我想,我能说吗?没有任何方法可以找出内存分配是连续的解决方案。Java的要点是,您不应该在意。