Posted on 2015-02-17 06:51
leekiang 阅读(776)
评论(0) 编辑 收藏 所属分类:
java
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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
###参考
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。