天天看點

java permgen space_完美解決PermGen space異常的問題

開發中遇到Eclipse報錯:java.lang.OutOfMemoryError: PermGen space。

PermGen space百度翻譯為:永久區域記憶體不足。

1. 先來一張jvm結構圖:

java permgen space_完美解決PermGen space異常的問題

記憶體不足問題一般都是發生在'堆‘上,GC作用區域也是在'堆‘上。

2. 這個'堆‘又劃分成了好幾塊區域,包括:

新生代:包括伊甸園區和存活區。

老年代:

永久帶:jdk1.8後變成元空間,元空間不再占用堆中的空間,而永久帶卻是在堆中開辟空間。

java permgen space_完美解決PermGen space異常的問題

可以發現,堆中就有個永久區。永久區的記憶體溢出,其實就是堆的記憶體不夠用。

隻需要調大堆的記憶體大小就可以解決問題。

3. 調整堆大小的參數:

-Xms256m -Xmx1024m

-Xms:堆的初始化大小,這裡設定成了256m.

-Xmx:堆最大的大小,這個設定成了1024m.

這裡面就存在了一個可伸縮的空間,而這個空間的存在會損耗服務的性能。因為擴容和釋放空間都是有性能損耗的。

最好的辦法就是:-Xms和-Xmx設定成同樣的大小。這樣就不存在可伸縮的空間了。

4. jvm參數的配置位置。

a. 如果是使用tomcat服務:

修改tomcat/bin目錄下的catalina.bat。(windows環境下修改檔案catalina.bat, linux環境下修改檔案catalina.sh)

java permgen space_完美解決PermGen space異常的問題

配置在檔案的第一行:

java permgen space_完美解決PermGen space異常的問題

b.如果是eclipse

修改eclipse的Run Configurations。(如果是debug模式,修改Debug Configurations。)

java permgen space_完美解決PermGen space異常的問題

寫在此處,友善拷貝:

-Xms256m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512m

java permgen space_完美解決PermGen space異常的問題

c.如果已經被配置成了服務

這種情況,就需要修改系統資料庫了。

c1. regedit指令打開系統資料庫。

c2. 找到配置的tomcat服務。

java permgen space_完美解決PermGen space異常的問題

修改:JvmMs,JvmMx,Options裡面的參數值。

c3. 修改完畢後需要重新開機服務。

d. Eclipse的配置檔案eclipse.ini中也可以配置jvm參數。

java permgen space_完美解決PermGen space異常的問題

-vmargs

-Xms512m

-Xmx1024m

-XX:PermSize=256M

-XX:MaxPermSize=512M

至此,記憶體溢出的問題應該就解決了。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。