調用 Transformer 轉換 XSLT 時 JVM 崩潰,錯誤日誌顯示 compacting perm gen total 86272K, used 86136K [99%],而堆內存尚有大量剩餘。嘗試增大 -XX:MaxPermSize=512M 無效,PermSize 未自動擴展。
MaxPermSize 只是上限,初始值 PermSize 默認較小,擴容有延遲同時設置初始值與最大值,強制 JVM 啟動時分配足夠永久代空間:
-XX:PermSize=512M -XX:MaxPermSize=512M
配置後問題徹底解決,無崩潰重現。
Java HotSpot(TM) Client VM (20.4-b02) windows-x86 JRE 1.6.0_29-b11遷移建議
JDK 8 移除永久代,改用 Metaspace(本地內存),此類問題不再存在。建議升級 JDK 8+ 徹底規避。