运行jboss,反复部署应用程序几遍后,往往会发生”java.lang.OutOfMemoryError: PermGen space” 这样的错致命错误。这个错误并非是java程序真的把机器内存用光所致,而是用光了“Perm内存”。Perm 实际是 permanent 的缩写,意思是持久的。java虚拟机一般会把应用程序运行的内存空间划分为两大块,一大块是放置运行期间使用的需要要经常变动的数据,如局部变量,实例 变量等,另一大块就是这个Permanent区域,放置类的定义等不怎么变的数据。反复部署应用程序很多遍后,jboss往往难以处理复杂的类依赖关系, 对permanent区域的内存回收更是很困难的,最后导致越用越多,几遍之后这个区域就不够用了,而这个区域又是不能增长的,所以就会出现上面所给出的 错误的。因此,我们可以在jboss的起动脚本里加入下面的配置信息,让java虚拟机加大Perm区的大小,以延缓出现上述错误。要加入的代码如下:
-XX:PermSize=128m
在我的1G内存的机器上,我改为如下配置了:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx768m -XX:PermSize=128m