java - TreeMap<Long, Long> 集合需要多少内存?

标签 java treemap java-memory-leaks java-heap

需要多少内存TreeMap<Long, Long>包含 1000 个(所有唯一的)键值对的集合?

是的,我只能看内存转储,但需要详细了解原因:

  • Long = n 字节
  • Entry<Long, Long > = 2n 字节,所以 1000 个条目 = 2000n 字节
  • 树节点中的引用:k 字节,1 个节点有 2 个指向子节点的链接,所以 2k 字节,
  • 等等

总计:X ?

最佳答案

JOL(Java 对象布局)

要回答此类问题,您可以使用工具 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

粒度

TreeMap 本身:

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

您可能还需要阅读有关 alignment 的其他问题和 object header .

关于java - TreeMap<Long, Long> 集合需要多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70026265/

相关文章:

java - 如何在 Spring 集成中解码 Xml 负载后保留 JMS header

java - XSLT 处理巨大的 XML 文件(几乎 5 GB)

java - AbstractResource.ResourceResponse 在写入 OutputStream 时会阻止用户界面

memory-leaks - 为什么 Java11 将 java.util.zip.ZipFile$Source 保留在堆上?

java.lang.OutOfMemory错误: Java heap space (JUnit test)

java - cvtColor 在 OpenCV for Java 中无法正常工作

java - HashMap 与 Treemap

java - 在 Java TreeMap 中加速顺序放置

android - java.lang.ClassCastException : java. util.HashMap 无法转换为 java.util.TreeMap

java - 匿名类隐藏对局部变量的引用