基線比較法:記錄「初始狀態」與「操作後歸位狀態」的堆中物件類型與數量差異。若終了時物件數量/種類增加,即存在洩漏。
某模組 6 大功能,每操作一次洩漏 ~9-10KB、~110 個物件。透過差異報告定位至具體類別與持有鏈,修復後洩漏歸零。
| 模式 | 典型徵兆 | 修復方向 |
|---|---|---|
| 靜態集合累積 | Map/List 隨請求增長 | 改用弱引用/定期清理/有界快取 |
| ThreadLocal 未清理 | 線程池場景下物件殘留 | 用完即 remove(),或用 FastThreadLocal |
| 監聽器/回調未解註冊 | 觀察者模式單向註冊 | 提供 unregister、弱引用監聽器 |
| 連線/資源未關閉 | Connection/Statement/ResultSet 殘留 | try-with-resources / finally 關閉 |
OptimizeIt 為經典商業工具,現代替代方案包括:JProfiler、YourKit、VisualVM (免費)、Eclipse MAT (堆傾印分析)、Arthas (線上診斷)。