gpt4 book ai didi

java - 为什么 jmap -histo 的结果与 jmap -dump 不同

转载 作者:行者123 更新时间:2023-12-02 10:04:45 26 4
gpt4 key购买 nike

最近我遇到了一个GC问题,我使用jmap来转储堆。但不幸的是它没有正常工作;

我在转储之前运行 jmap -histo 3916|more ,结果是

 num     #instances         #bytes  class name
----------------------------------------------
1: 1784198 733117168 [C
2: 12210014 390720448 java.util.concurrent.ConcurrentHashMap$Node
3: 11908601 285806424 java.lang.Long
4: 11884602 285230448 java.lang.Double
5: 545 86335608 [Ljava.util.concurrent.ConcurrentHashMap$Node;
6: 12405 65677584 [I
7: 1735496 41651904 java.lang.String

然后我运行“jmap -dump:format=b,file=heap.bin 3916”,然后我使用eclipse MemoryAnalyzer来分析heap.bin,它产生了如下的直方图

Class Name                                   |    Objects | Shallow Heap | Retained Heap
-----------------------------------------------------------------------------------------
java.util.concurrent.ConcurrentHashMap$Node | 12,207,879 | 390,652,128 |
java.lang.Long | 11,889,204 | 285,340,896 |
java.lang.Double | 11,884,164 | 285,219,936 |
java.util.concurrent.ConcurrentHashMap$Node[]| 347 | 86,311,832 |
char[] | 1,659,912 | 50,128,128 |
java.lang.String | 1,659,062 | 39,817,488 |
-----------------------------------------------------------------------------------------

分析这两个结果,发现dump中的对象都小于histo,并且char[] 的对象要少得多,但为什么呢?运行“jmap -dump”命令时,jmap 是否会触发 Minor gc?

最佳答案

jmap 除非指定 :live 选项,否则不会触发 GC。如果没有此选项,直方图将包含无法访问的对象。

但是,内存分析器默认 removes unreachable objects在解析堆转储时。尽管也可以使用内存分析器对无法访问的对象进行计数。

关于java - 为什么 jmap -histo 的结果与 jmap -dump 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55396445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com