1. 1)jmap是jdk自带的jvm内存分析的工具,位于jdk的bin目录。jdk1.6中jmap命令用法: 
  2. jmap -histo <pid>在屏幕上显示出指定pid的jvm内存状况: 
  3. num     #instances         #bytes  class name 
  4. ---------------------------------------------- 
  5.    1:         24206        2791864  <constMethodKlass> 
  6.    2:         22371        2145216  [C 
  7.    3:         24206        1940648  <methodKlass> 
  8.    4:          1951        1364496  <constantPoolKlass> 
  9.    5:         26543        1282560  <symbolKlass> 
  10.    6:          6377        1081744  [B 
  11.    7:          1793         909688  <constantPoolCacheKlass> 
  12.    8:          1471         614624  <instanceKlassKlass> 
  13.    9:         14581         548336  [Ljava.lang.Object; 
  14.   10:          3863         513640  [I 
  15.   11:         20677         496248  java.lang.String 
  16.   12:          3621         312776  [Ljava.util.HashMap$Entry; 
  17.   13:          3335         266800  java.lang.reflect.Method 
  18. Total        239019       17140408 
  19. #instance指的是对象数量,#bytes指的是这些对象占用的内存大小,class name指的是对象类型。 
  20. 导出内存信息:jmap -dump:file=c:\dump.txt PID 

 

  1. 2)jstat -gcutil pid 10000,这个命令是每个10秒钟输出一次jvm的gc信息. 
  2. S0       S1       E        O          P       YGC     YGCT    FGC    FGCT     GCT   
  3.  54.62   0.00  42.87  43.52  86.24   1792    5.093    33    7.670   12.763 
  4. S0:新生代的susvivor0区,空间使用率为54..62% 
  5. S1:新生代的susvivor1区,空间使用率为0.00%(因为还没有执行第二次minor收集) 
  6. E:eden区,空间使用率42.87% 
  7. O:旧生代,空间使用率43.52% 
  8. P:持久带,空间使用率86.24% 
  9. YGC:minor gc执行次数1792次 
  10. YGCT:minor gc耗费的时间5.093毫秒 
  11. FGC:full gc执行次数33 
  12. FGCT:full gc耗费的时间7.670毫秒 
  13. GCT:gc耗费的总时间12.763毫秒