JVM内存分析笔记

1. java.lang.OutOfMemoryError: GC overhead limit exceeded原因
   <http://blog.csdn.net/taijianyu/article/details/6606792>
   <http://www.sunnybtoc.com/page/M0/S746/746195.html>
   
2. 用jhat分析·jmap -dump:format=b,file=mem.dat PID·命令导出来的文件时报错
   java.io.IOException: Unrecognized magic number
   <https://forums.oracle.com/forums/thread.jspa?threadID=1542284> 没找到原因
   
3. 命令
   1. jmap
 jmap -dump:live,format=b,file=heap.dmp PID 把本机的java内存映像导出到heap.dmp中
 jmap pid #打印内存使用的摘要信息
      jmap –heap pid #java heap信息
      jmap -histo:live pid #统计对象count ,live表示在使用
      jmap -histo pid >mem.txt #打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
      jmap -dump:format=b,file=mem.dat PID #将内存使用的详细情况输出到mem.dat 文件
   2. jhat 用来分析jmap导出的文件
      用jhat命令可以参看 jhat -port 7000 mem.dat
      然后使用:http://127.0.0.1:7000/ 查看类相关信息 
   3. jstat
      jstat -gcutil  PID
      例子:

    S0      S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
    11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579

    S0  — Heap上的 Survivor space 0 区已使用空间的百分比
    S1  — Heap上的 Survivor space 1 区已使用空间的百分比
    E   — Heap上的 Eden space 区已使用空间的百分比
    O   — Heap上的 Old space 区已使用空间的百分比
    P   — Perm space 区已使用空间的百分比
    YGC — 从应用程序启动到采样时发生 Young GC 的次数
    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
    FGC — 从应用程序启动到采样时发生 Full GC 的次数
    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
    GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

jstat详细介绍点击这里


###参考
1. [JMAP、jstat命令详解](http://bbs.chinaunix.net/thread-3644198-1-1.html)
2. [J2SE6中使用jhat来分析内存堆](http://hi.baidu.com/tister/item/9444a3125796cf433a176eb9)


###jvm的内存回收过程是这样的
对象在Eden Space创建,当Eden Space满了的时候,gc就把所有在Eden Space中的对象扫描一次,
把所有有效的对象复制到第一个Survivor Space,同时把无效的对象所占用的空间释放。
当Eden Space再次变满了的时候,就启动移动程序把Eden Space中有效的对象复制到第二个Survivor Space,
同时,也将第一个Survivor Space中的有效对象复制到第二个Survivor Space。如果填充到第二个Survivor Space
中的有效对象被第一个Survivor Space或Eden Space中的对象引用,那么这些对象就是长期存在的,
此时这些对象将被复制到Permanent Generation。

你可能感兴趣的:(JVM内存分析笔记)