PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域OutOfMemoryError: PermGen space從表面上看就是內存益出,解決方法也一定是加大內存。說說為什么會內存益出:這一部分用於存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web服務器對JSP進行pre compile的時候。
解決方法
一、手動設置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系統)或者catalina.sh(unix系統)
1.windows系統 在 TOMCAT_HOME/bin/catalina.bat 文件 echo Using CATALINA_BASE: "%CATALINA_BASE%"上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m
2.unix系統 在 catalina.sh 文件 echo "Using CATALINA_BASE: $CATALINA_BASE"上面或者第一行加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m
或者加入 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
二、如果啟動Tomcat的時候是通過MyEclipse啟動服務器的話,需要在MyEclipse里面同樣設置內存大小
原圖上的文字:-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M
-Xms64m -Xmx256m
1、修改eclipse.ini
在Myeclipse安裝目錄下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一個myeclipse.ini配置文件,設置如下:
-vmargs
-Xmx512m
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=64m
2、設置Default VM Arguments
在myEclipse中,打開Windows-> Preferences->Java->Installed JREs->點擊正在使用的JDK->Edit->Default VM Arguments文本框中輸入:-Xms64m -Xmx256m
3、如果是web工程還報內存溢出,可能就要設置tomcat內存。
(1)tomcat的安裝根目錄%tomcat%bin/catalina.bat文件,SET JAVA_OPTS 一行;
(2)myeclipse配置web服務器配置 Window—Preferences—Myeclipse—Servers—tomcat 5.x—JDK的Optional Java VM arguments配置為:
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
4、如果是debug模式運行,需要調整debug的虛擬機參數,因為debug模式的默認內存分配時很少的。
選擇Arguments 在 VM arguments里面填寫內存值如:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
一般的ini文件設置主要包括以下幾項:
-vmargs
-Xms40m
-Xmx256m
-XX:PermSize=64M
-XX:MaxPermSize=128M
以下解釋其意思。
-vmargs:說明后面是VM的參數
-Xms40m:虛擬機占用系統的最小內存
-Xmx256m:虛擬機占用系統的最大內存
-XX:PermSize:最小堆大小。一般報內存不足時,都是說這個太小,
堆空間剩余小於5%就會警告,建議把這個稍微設
大一點,不過要視自己機器內存大小來設置
-XX:MaxPermSize:最大堆大小。這個也適當大些
所以若出現問題,首先請調整 -Xms40m:將其設置的小一些,就ok了,1g內存推薦設置為:
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=256M
-XX:MaxPermSize=512M
其中-XX:PermSize=64M可以設置大一些,但不能超過MaxPermSize
-Xmx512M的5%為25.6M,理論上要求-Xmx的數值與-XX:MaxPermSize必須大於25.6M