3

当我阅读此链接Java 批评时。在大阵列部分。有两点我不明白:

Java 还缺乏真正的多维数组(通过单个间接访问连续分配的单个内存块),这限制了科学和技术计算的性能

在 C 中,我知道多维数组只是元素的连续内存。所以,如上所述,Java 中的每一行都是一个对象,而多行就像多对象一样,它们在内存中并不连续,对吧?

Java 因不支持超过 231 - 1(约 21 亿)个元素的数组而受到批评...数组必须由 int 值索引...尝试访问具有长索引值的数组组件会导致编译时间错误

这是否意味着,如果我们可以通过长整数访问数组组件,则数组大小可以更大?在这种情况下,数组的这个仍然限制大小是 long 的大小,对吗?

谢谢 :)

4

1 回答 1

3

... Java 中的每一行都是一个对象,多行就像多对象一样,它们在内存中不连续,对吧?

那是对的。Java 多维数组是一个数组数组,每个数组表示为一个单独的对象。

这是否意味着,如果我们可以通过长整数访问数组组件,则数组大小可以更大?

不可以。Java 数组的最大大小为 2^31 - 1 个元素。

JLS 在JLS 10.4上这样说:

“数组必须由 int 值索引;short、byte 或 char 值也可以用作索引值,因为它们受到一元数字提升 (§5.6.1) 并成为 int 值。

尝试访问具有长索引值的数组组件会导致编译时错误。”


简而言之,您链接到的页面正确地指出 Java 不适合需要使用非常大数组的应用程序。(可以绕过这些限制,但是如果不将底层数组表示形式包装为对象,您就无法干净地做到这一点。这会影响性能,并且意味着您不能使用[...]语法进行索引。)

于 2012-10-06T02:41:44.003 回答