0

Long[]Integer[]またはのどちらを使用ArrayList<Integer>しても、それらすべてが同じメモリ使用量を返すのはなぜですか?

System.out.println("Memory Usage : " + Runtime.getRuntime().totalMemory()/(1024*1024));
System.out.println("Memory Usage : " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));

//Long[] aa = new Long[70000000];
Integer[] bb = new Integer[70000000];
//ArrayList<Integer> a = new ArrayList<Integer>(70000000);

System.gc();

System.out.println("Memory Usage : " + Runtime.getRuntime().totalMemory()/(1024*1024));
System.out.println("Memory Usage : " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));
4

1 に答える 1

6

上記のステートメントで、Long []、Integer []、またはArrayListのいずれを使用しても、それらすべてが同じメモリ使用量を与えるのはなぜですか?

それは完全に理にかなっています。いずれの場合も、基本的に 70000000 * (JVM の参照サイズ) の配列を割り当てています。Integer参照のサイズは、参照のサイズと同じLongである参照のサイズと同じObjectです。オブジェクト自体ArrayListの追加のオーバーヘッドが非常に小さい場合、それはかなり小さいものであり、Louis のコメントに従って簡単に説明できます。ArrayList

これらの配列に実際にデータを入力し、 と のインスタンスを作成するLongInteger、違いがわかります同様に、 a long[]vs anを作成した場合int[]、違いが見られます。

于 2012-11-30T15:37:50.897 に答える