本文針對 Sun JVM (HotSpot) 的垃圾回收線程優先級、自動回收與手動觸發 System.gc() 的差異、以及生產環境 JVM 選型建議進行淺析,旨在幫助開發者理解 GC 行為,避免盲目調用導致性能抖動。
System.gc()System.gc() 優先級高(用戶線程級別):調用即強制觸發 GC,回收效果顯著(特別在 J2ME 等資源受限環境驗證過),但會導致 Stop-The-World 全線程停頓,影響系統響應。在「適當時機」(如批次任務結束、緩存清理後、進入空閒期)調用 兩次 System.gc() 可較大概率觸發 Full GC 並回收浮動垃圾。「兩次」為經驗值,具體視對象存活分布而定,建議通過 -XX:+PrintGCDetails 觀察實際回收效果後調整。
理解 GC 線程調度特性,避免在高併發關鍵路徑盲目調用 System.gc();利用 -verbose:gc 或 -XX:+PrintGCDetails 監控 GC 頻率與停頓;生產環境考慮遷移至並行收集器(JRockit 或 JDK 6+ Parallel GC / JDK 7+ G1)以獲得確定性性能表現。