gpt4 book ai didi

java 为什么二维中原始数组与对象数组的内存使用不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:39 25 4
gpt4 key购买 nike

相关代码

int row = 100000;
int col = 18;

Object[][] objectArray = new Object[row][1];
int[][] intArray = new int[row][1];

System.out.println("Size of objectArray = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(objectArray) + " bytes");
System.out.println("Size of intArray = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(intArray) + " bytes");

Object[][] objectMatrix = new Object[row][col];
int[][] intMatrix = new int[row][col];

System.out.println("Size of objectMatrix = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(objectMatrix) + " bytes");
System.out.println("Size of intMatrix = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(intMatrix) + " bytes");

相关输出

Size of objectArray  = 4000024 bytes
Size of intArray = 4000024 bytes
Size of objectMatrix = 17600024 bytes
Size of intMatrix = 10400024 bytes

如果不是一维(列数 = 1),而是二维(列数 > 1),对象矩阵会占用更多空间。

谁能解释一下原因?

编辑:添加了另一个只有一行的案例

    int row = 1;
int col = 2;

Object[][] objectArray = new Object[row][1];
int[][] intArray = new int[row][1];

System.out.println("Size of objectArray = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(objectArray) + " bytes");
System.out.println("Size of intArray = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(intArray) + " bytes");

Object[][] objectMatrix = new Object[row][col];
int[][] intMatrix = new int[row][col];

System.out.println("Size of objectMatrix = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(objectMatrix) + " bytes");
System.out.println("Size of intMatrix = " + net.sourceforge.sizeof.SizeOf.deepSizeOf(intMatrix) + " bytes");

输出

Size of objectArray  = 64 bytes
Size of intArray = 64 bytes
Size of objectMatrix = 72 bytes
Size of intMatrix = 64 bytes

最佳答案

对象数组中引用的大小取决于许多因素(32 位与 64 位),或者如果您使用的是 64 位,您是否正在运行压缩的 OOP?因为我通常在 64 位环境中工作,所以我总是希望 Object[] 占用更多内存。另一方面,Java 中的 int 被定义为 32 位值,因此对于 int[],您将为每个值使用 32 位,加上数组对象本身的一些开销。

关于java 为什么二维中原始数组与对象数组的内存使用不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com