TreeMap<Long, Long>
用 1000 个(所有唯一的)键值对填充的集合需要多少内存?
是的,我可以只看内存转储,但需要详细了解原因:
Long
= n 字节Entry<Long, Long >
= 2n 字节,因此 1000 个条目 = 2000n 字节- 树节点中的引用:k 字节,1 个节点有 2 个到子节点的链接,所以 2k 字节,
- 等等
总计:X ?
TreeMap<Long, Long>
用 1000 个(所有唯一的)键值对填充的集合需要多少内存?
是的,我可以只看内存转储,但需要详细了解原因:
Long
= n 字节Entry<Long, Long >
= 2n 字节,因此 1000 个条目 = 2000n 字节总计:X ?
要回答此类问题,您可以使用工具JOL。
在你的情况下,它会得到这样的结果:
java.util.TreeMap@17046283d footprint:
COUNT AVG SUM DESCRIPTION
2000 24 48000 java.lang.Long
1 48 48 java.util.TreeMap
1000 40 40000 java.util.TreeMap$Entry
3001 88048 (total)
Total 88048 bytes used
颗粒状
树图本身:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 Set<K> AbstractMap.keySet N/A
16 4 Collection<V> AbstractMap.values N/A
20 4 int TreeMap.size N/A
24 4 int TreeMap.modCount N/A
28 4 Comparator<? super K> TreeMap.comparator N/A
32 4 Entry<K, V> TreeMap.root N/A
36 4 EntrySet TreeMap.entrySet N/A
40 4 KeySet<K> TreeMap.navigableKeySet N/A
44 4 NavigableMap<K, V> TreeMap.descendingMap N/A
Instance size: 48 bytes
TreeMap.Entry
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 1 boolean Entry.color N/A
13 3 (alignment/padding gap)
16 4 K Entry.key N/A
20 4 V Entry.value N/A
24 4 Entry<K, V> Entry.left N/A
28 4 Entry<K, V> Entry.right N/A
32 4 Entry<K, V> Entry.parent N/A
36 4 (object alignment gap)
Instance size: 40 bytes
和长:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) N/A
8 4 (object header: class) N/A
12 4 (alignment/padding gap)
16 8 long Long.value N/A
Instance size: 24 bytes