微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多维数组声明中的顺序对已用内存有影响吗?

如何解决多维数组声明中的顺序对已用内存有影响吗?

是的,确实有所作为。

在Java中,2D数组是1D数组的数组,并且数组(像所有对象一样)除具有保存元素本身所需的空间外,还具有标头。

因此,请考虑int[10][2]vs和int[2][10],并假设使用32位JVM。

  • int[2][10]由2个元素的一个数组和10个元素的2个数组组成。总计-3个数组对象+ 22个元素。
  • int[10][2]由10个元素的一个数组和2个元素的10个数组组成。总计-11个数组对象+ 30个元素。

如果我们假设标头大小是3个32位字(对于32位JVM通常如此),而引用是1个32位字,则

  • int[2][10] 需要3 * 3 + 22 * 1 = 31个字= 124字节
  • int[10][2] 需要11 * 3 + 30 * 1 = 63个字= 252个字节

应用相同的逻辑,您可以估计具有更大维数的数组的大小。

但是很明显,如果最大的尺寸是最右边的尺寸,则可以使用较少的空间。

我已经完成了int数组的数学运算,但是在32位计算机上,an int和areference占用相同数量的字节。在64位计算机上,引用的大小可以与int或相同long,具体取决于JVM选项。标头大小也可能不同....不确定…可能取决于平台。

我没有考虑容纳Bitmap对象本身所需的空间,但是无论如何组织数组都一样。

解决方法

多少字节将被分配给ab

import android.graphics.Bitmap;

Bitmap[][][] a = new Bitmap[1000][2][2];
Bitmap[][][] b = new Bitmap[2][2][1000];

请注意,我只是在询问纯数组占用的内存,内部没有对象。

我为什么要问?因为我在写Android游戏。对我而言,顺序并不重要,但是如果存在内存差异,最好保存一些。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。