今天碰到了這個問題:
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,是指內存的永久保存區域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的時候。

改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

把PermGen space開大點就行了

GC(Garbage Collection)應該不會對PermGen space進行清理
所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤

項目是TOMCAT的WEB APP,由于沒有在發布的時候對JSP進行pre compile,
所以那個錯誤是在運行是出現的,相信如果把pre compile加上的話,
在啟動APP的時候就會出錯了.

這也與我用熱部署功能相關, tomcat不重起多次部署, tomcat不會清理前面加載得環境, 僅僅是將context跟改掉為新部署得,所以將越來越多, 導致出現此問題

參考連接:

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=165291