首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JVM Crash: PermGen Space 99% Used 解決實錄

     編輯:Java 相關知識

調用 Transformer 轉換 XSLT 時 JVM 崩潰,錯誤日誌顯示 compacting perm gen total 86272K, used 86136K [99%],而堆內存尚有大量剩餘。嘗試增大 -XX:MaxPermSize=512M 無效,PermSize 未自動擴展。

根因分析

  • XSLT 轉換加載大量類/字節碼填滿永久代
  • JVM 未及時擴展 PermGen 即觸發崩潰(疑似 JDK 6 Bug)
  • 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+ 徹底規避。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved