`new int [1024]`と `new Integer [1024]`コンストラクトのメモリ消費量の違いは何ですか?
int[] ints = new int[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;
Integer[] ints = new Integer[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;
注:整数型の値の1/8はキャッシュされ、余分なメモリを消費しません。 ブール型およびバイト型のすべての値もキャッシュされます。
構造 | JVM 32ビット(バイト単位のサイズ) | JVM 64ビット(バイト単位のサイズ) |
---|---|---|
new BitSet(1024)
| 168 | 168 |
new boolean[1024]
| 1040 | 1040 |
new Boolean[1024]
| 4112 | 4112 |
new ArrayList<Boolean>(1024)
| 4136 | 4136 |
1024のnew LinkedList<Boolean>()
| 24624 | 24624 |
new byte[1024]
| 1040 | 1040 |
new Byte[1024]
| 4112 | 4112 |
new ArrayList<Byte>(1024)
| 4136 | 4136 |
1024のnew LinkedList<Byte>()
| 24624 | 24624 |
new char[1024]
| 2064 | 2064 |
new Character[1024]
| 18448 | 18448 |
new short[1024]
| 2064 | 2064 |
new Short[1024]
| 18448 | 18448 |
new ArrayList<Character/Short>(1024)
| 18472 | 18472 |
new LinkedList<Character/Short>()
with 1024 | 38960 | 38960 |
new int[1024]
| 4112 | 4112 |
new Integer[1024]
| 18448 | 18448 |
new float[1024]
| 4112 | 4112 |
new Float[1024]
| 20496 | 20496 |
new ArrayList<Integer/Float>(1024)
| 18472 | 18472 |
new LinkedList<Integer/Float>()
with 1024 | 38960 | 38960 |
new long[1024]
| 8208 | 8208 |
new Long[1024]
| 18448 | 25616 |
new double[1024]
| 8208 | 8208 |
new Double[1024]
| 20496 | 28688 |
new ArrayList<Long/Double>(1024)
| 18472 | 25640 |
new LinkedList<Long/Double>()
with 1024 | 38960 | 46128 |
new String[1024]
| 52464 | 61456 |
new ArrayList<String>(1024)
| 52488 | 61480 |
1024のnew LinkedList<String>()
| 72976 | 81968 |
完全なコードはこちらから入手できます。
Z.Y. おそらく、すべてのJAVA開発者はこれをすべて知っている必要がありますが、誰かが知らない場合は、