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的時候。
如果你的WEB APP下都用了大量的第三方jar,其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。
解決方法1:
手動設置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建議:
將相同的第三方jar文件移置到tomcat/shared/lib目錄下,
這樣可以達到減少jar 文檔重復占用內存的目的。
解決方法2:
Tomcat配置中的 VM options選項,添加:
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
-Xms,表示程序啟動時,JVM 堆的初始化最小尺寸參數;
-Xmx,表示程序啟動時,JVM 堆的初始化最大尺寸參數;
-XX:PermSize,表示程序啟動時,JVM 方法區的初始化最小尺寸參數;
-XX:MaxPermSize,表示程序啟動時,JVM 方法區的初始化最大尺寸參數。