почему результат jmap -histo отличается от jmap -dump - PullRequest
0 голосов
/ 28 марта 2019

недавно я столкнулся с проблемой 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 |              
-----------------------------------------------------------------------------------------

Проанализировав два результата, я обнаружил, что все объекты в дампе меньшеhisto, а объектов char [] намного меньше, но почему?jmap вызывает незначительный gc при запуске команды "jmap -dump"?

1 Ответ

0 голосов
/ 28 марта 2019

jmap не вызывает GC, если вы не укажете опцию :live.Без этой опции гистограмма включает недоступные объекты.

Однако по умолчанию анализатор памяти удаляет недоступные объекты при анализе дампа кучи.Хотя с помощью Memory Analyzer также можно считать недоступные объекты.

...