関連コード
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
1D(colsの数= 1)の代わりに2D(colsの数> 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