Ada*_*zyk 10 java memory arrays
将分配多少字节a和b?
import android.graphics.Bitmap;
Bitmap[][][] a = new Bitmap[1000][2][2];
Bitmap[][][] b = new Bitmap[2][2][1000];
Run Code Online (Sandbox Code Playgroud)
请注意,我只询问纯数组所占用的内存,内部没有任何对象.
我为什么这么问?因为我正在写一款Android游戏.对我来说订单无关紧要,但如果存在差异,最好保存一些.
Ste*_*n C 10
是的它确实有所作为.
在Java中,2D数组是一维数组的数组,除了保存元素本身所需的空间之外,数组(像所有对象一样)都有标题.
所以考虑int[10][2]对比int[2][10],并假设一个32位JVM.
int[2][10]由一个包含2个元素的数组和2个包含10个元素的数组组成.总计 - 3个数组对象+22个元素.int[10][2]由一个包含10个元素的数组和10个包含2个元素的数组组成.总计 - 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位机器上int和a reference占用相同的字节数.在64位计算机上,引用可以与a int或a 相同long,具体取决于JVM选项.标题大小也可能不同....不完全确定...可能依赖于平台.
我没有考虑保持Bitmap对象本身所需的空间,但是你组织数组是一样的.