今天碰到了這個問題:
javax.servlet.ServletException: PermGen space
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
查了一下, PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域OutOfMemoryError: PermGen space從表面上看就是內(nèi)存益出,解決方法也一定是加大內(nèi)存。說說為什么會內(nèi)存益出:這一部分用于存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space區(qū)域,它和和存放Instance的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現(xiàn)PermGen space錯誤。這種錯誤常見在web服務(wù)器對JSP進行pre compile的時候。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
把PermGen space開大點就行了
GC(Garbage Collection)應(yīng)該不會對PermGen space進行清理
所以如果你的APP會LOAD很多CLASS的話,就很可能出現(xiàn)PermGen space錯誤
項目是TOMCAT的WEB APP,由于沒有在發(fā)布的時候?qū)SP進行pre compile,
所以那個錯誤是在運行是出現(xiàn)的,相信如果把pre compile加上的話,
在啟動APP的時候就會出錯了.
這也與我用熱部署功能相關(guān), tomcat不重起多次部署, tomcat不會清理前面加載得環(huán)境, 僅僅是將context跟改掉為新部署得,所以將越來越多, 導致出現(xiàn)此問題
參考連接:
http://www-128.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/index.html
http://topic.csdn.net/t/20051107/17/4377324.html
http://blog.chinaunix.net/u/22374/showart.php?id=1652Array1