Java 誕生已超 25 年,無數系統運行十年以上,早已成為「遺留系統」。面對龐大、老舊的代碼庫,如何在不重寫的前提下提升可維護性與效能?本文歸納八大低風險、高回報的實戰技巧。
推薦 JProfiler(CPU 分析)與 Eclipse Memory Analyzer(記憶體診斷)。常見隱形效能殺手:低效的 hashCode()/equals()、SimpleDateFormat 等。注意分析器會拖慢應用,務必在測試環境執行。
除分析器外,廠商工具(如 Proactive DBA、HP Diagnostics)能揭露長時間 SQL、重複查詢、阻塞查詢。自製工具 jdbcGrabber 可視化呈現代碼對資料表的存取關係,助力合併多次查詢為單一請求。
遺留專案常缺乏自動化構建/部署,導致新成員重複踩坑。Maven 對目錄結構要求嚴格,遷移困難;Ant 更靈活,支援漸進式採用,是遺留系統的優選。
將內部功能(如清除快取)透過 JMX 公開,運維團隊無需登入伺服器即可操作。幾乎零風險、零副作用,卻能大幅降低人工介入成本。
採用 Michael Feathers《修改代碼的藝術》「遺留代碼修改演算法」:確認修改點 → 找出測試點 → 打破依賴 → 編寫測試 → 修改重構。核心在於「打破依賴」:移除靜態引用、引入介面與 Facade 隔離外部相依。
無用代碼增加認知負擔與維護風險。利用 Emma(原為覆蓋率工具)注入 JVM 追蹤實際執行路徑,結合完整測試週期,精準識別死代碼並刪除。
避免團隊成員各自為政(一人用 Spring JDBC,另一人用 MyBatis),導致架構更混亂。定義可達標的目標架構,每次修改朝該方向小步前進,久久為功。
JDK 1.5 早已停止支援,升級至 1.6+ 通常平滑且帶來顯著效能提升,且獲得 jvisualvm、jcmd 等內建診斷工具,助力 GC 問題排查。
聘請遺留系統專家如同神經外科醫生,能以最小創傷解決棘手問題,延長系統壽命 2-4 年。推薦閱讀《修改代碼的藝術》深化實戰能力。