Javaの異なる構造は、異なる量のメモリを消費します。 したがって、最も効率的なデータ保存方法の選択は私たちにとって非常に重要です。
`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開発者はこれをすべて知っている必要がありますが、誰かが知らない場合は、
笑顔で手を振って、読んで覚えてください:)