今天碰到了这个问题:
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