java - N个元素的一维数组是否需要与2D[m][n]相同的内存量,m*n=N

标签 java arrays

这是关于 Java 中内存分配的问题。

假设我有一个整数数组 A[100] 和另一个整数数组 B[10][10]。他们在 Java 中需要相同数量的内存还是不同?如果是后者,有什么区别,它是如何随着 N 增长的?

我在这里只讨论 N 是正数的 2 次方,所以我们在这里讨论方形二维数组及其可能的一维表示。

最佳答案

肯定不会。

在 C/C++ 中,二维数组在“一个 block ”中为二维数组分配所有内存。

在 Java 中,二维数组是“数组的数组”。一维数组是一个chunk分配的,但是一维数组可能是分散的。此外,“外部”数组(二维)也需要堆内存,存储对一维数组的引用。

因此,如果分配一个维度为 m(外部)和 n(内部)的二维数组,Java 将创建一个 m 元素和 mn 元素数组。外部数组仅存储对 m 内部数组的引用。

This page对 Java 中的多维数组进行了很好的解释和可视化。

关于java - N个元素的一维数组是否需要与2D[m][n]相同的内存量,m*n=N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958589/

相关文章:

java - 如何从网络应用程序打印到收据打印机?

java - 这会导致内存泄漏吗?

java - Listview 项目 getView 一次又一次地重复自己

iphone - Objective-C中如何返回非对象类型的数组列表

javascript - 在对象数组中的属性中查找具有最大值的所有对象,并从同一对象返回其他属性的值

java - 我的方法为返回数组中的每个值返回相同的值

java - 执行包含 java -jar Runtime.exec() 的 shell 脚本,它将使用哪个 java,操作系统级别还是应用程序级别

python - numpy.sort 的逆映射

Python: numpy.insert NaN 值

php - 将键值对的 PHP 数组转换为分层嵌套树结构