Linux, Open-source, Programação e Produtividade

JMap Histogram

Jonas Abreu em 28/03/2012

Quando falei sobre VisualVM, comentei que o sampling de memória só funciona local. Mas também falei que não costumo sentir muita falta disso. A razão é uma ferramenta que vem junto com o JDK, o JMap.

O JMap serve para vermos o estado da mémoria na aplicação. Em geral, para encontrar algum problema relacionado à memória, o que mais tenho interesse é em quantas instâncias existem e o custo total de memória.

Para obter essa informação basta rodar jmap -histo PID_DA_APLICACAO. O resultado vai ser semelhante à esse (rodei com o pid da minha VisualVM):

 num     #instances         #bytes  class name
----------------------------------------------
   1:         54811        7470568  <methodKlass>
   2:         54811        7412168  <constMethodKlass>
   3:          4890        5908720  <constantPoolKlass>
   4:         66006        5737168  [C
   5:          4890        4228632  <instanceKlassKlass>
   6:         83853        4188840  <symbolKlass>
   7:          4290        3751344  <constantPoolCacheKlass>
   8:         19144        2735592  [B
   9:         56228        1799296  java.lang.String
  10:          5963        1741896  [I
  11:          6462         572368  [Ljava.util.HashMap$Entry;
  12:          5267         547768  java.lang.Class
  13:          8039         537856  [S
  14:         14566         466112  java.util.HashMap$Entry
  15:          7884         415792  [[I
  16:          4007         346512  [Ljava.lang.String;
  17:           642         330224  <methodDataKlass>
  18:          6129         310096  [Ljava.lang.Object;
  19:          6055         290640  java.util.HashMap
  20:           348         203232  <objArrayKlassKlass>
  21:          3750         180000  java.nio.HeapCharBuffer
  22:          3746         179808  java.nio.HeapByteBuffer
  23:          7214         173136  java.lang.StringBuilder
  24:          5297         169504  java.util.Hashtable$Entry
  25:          1885          90480  java.util.StringTokenizer
  26:          2486          79552  javax.swing.text.html.parser.ContentModel
  27:           568          69872  [Ljava.util.Hashtable$Entry;

O ideal é que você tenha uma idéia geral de como se comporta a memória da sua aplicação, porque fica bem mais fácil de encontrar algum problema.

Creative Commons License
JMap Histogram de Jonas Abreu está licenciado sob Creative Commons License.