| 工具 | 特點 |
|---|---|
| JConsole | JDK 自帶、輕量、適合生產環境、GC 詳情豐富 |
| JProfiler | 商業收費、功能最強、CPU/內存/線程全維度分析 |
| VisualVM | JDK 自帶、免費開源、功能接近 JProfiler、**首選推薦** |
在 **GC 前後** 分別導出堆快照,對比對象數量/類型變化,**被遺漏的對象即洩漏源頭**。
java.lang.OutOfMemoryError: Java heap space | 老年代被不可回收對象填滿 | 快照對比 + 引用鏈定位洩漏點;或擴大堆/優化代碼 |
| java.lang.OutOfMemoryError: PermGen space / Metaspace | 類加載過多(反射、動態代理、JSP、OSGi) | -XX:MaxPermSize/MaxMetaspaceSize;排查重複加載;升級 JDK/換 JRockit |
| java.lang.StackOverflowError | 遞歸無出口/循環調用 | 代碼修復:改迭代、增加終止條件 |
| Fatal: Stack size too small / unable to create new native thread | 線程過多/棧太大導致 OS 內存不足 | -Xss 減小棧;重構為 NIO/線程池;增加物理內存/減小堆 |
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log,長期保存,趨勢分析。