Javaの主要コレクションクラスの内部メモリ消費量を、一覧表にまとめてみました。メモリ消費量がコレクションの要素数に対して線形増加すると見なした場合の、実測を基にした推定値です。
表を見ると、TroveのTHashMapとTHashSetのメモリ効率が非常に優秀だと分かります。Troveはプリミティブ型のコレクションライブラリとして使われる場面が多いと思いますが、THashMap / THashSetも積極的に使っていきたいですね。
| クラス |
消費量(bytes) |
| ArrayList |
4 * n |
| LinkedList |
24 * n |
| HashMap / HashSet |
32 * n |
| TreeMap / TreeSet |
32 * n |
| LinkedHashMap / LinkedHashSet |
40 * n |
| クラス |
消費量(bytes) |
| HashedMap |
32 * n |
| LinkedMap |
40 * n |
| ListOrderedMap / ListOrderedSet |
40 * n |
| DualHashBidiMap |
64 * n |
| DualTreeBidiMap |
64 * n |
| LRUMap |
80 * n |
| TreeBidiMap |
152 * n |
| クラス |
消費量(bytes) |
| THashSet |
8 * n |
| THashMap |
16 * n |
| TLinkedList |
0 (リンクを自前で用意する必要あり) |