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。