監控工具:jvisualVM、VisaulVM、jprofiler
JVM優化書籍:《Java性能優化權威指南》、《深入理解java虛擬機》
1.年輕代空間不足
2.per Gen(永久代)空間滿
3.CMS GC時出現promotion failed和concurrent mode failure
4.統計得到的Minor GC晉升到舊生代的平均大小大於舊生代的剩余空間等
結論:
Full GC本身是好的,可以清除老年代的垃圾,但是如果Full GC發生的頻率高了,就會影響性能,同時意味着系統內存分配機制出現問題。
因為Full GC本身執行時間較長(甚至超過1秒),而且除非采用G1 GC,否則其它的GC方式都會或多或少掛起所有線程執行(Stop-the-world),如果Full GC頻繁發生,系統被掛起的次數就會增加,響應時間就會變慢。
同時,Full GC頻繁發生,意味着你的內存分配機制存在問題,也許是內存泄露,有大量內存垃圾不斷在老年代產生;也許是你的大對象(緩存)過多;也有可能是你的參數設置不好,minor GC清理不掉內存,導致每次minor GC都會觸發Full GC;還有可能是你的老年代大小參數設置錯誤,老年代過小等等原因