遇java.lang.OutOfMemoryError: PermGen space之解决方案

          昨天项目更新功能但是报了一个永久保存区域溢出的错,导致我所有被SSH调用的方法都不可用,让我很是郁闷了一番,不过这个问题很普遍。

网上一搜,解决方案一大堆。之所以报这个错,原因:PermGen space(内存的永久保存区域)这一部分用于存放Class和Meta的信息,Class

在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC不会在主程序运行期对PermGen space进行清理,所以如

果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。

的时候。

我的项目使用了spring,他会大量产生代理对象,虽然产生到一定程度就不会增加了,但是因为延迟加载,所以项目大了之后,代理对象就很容易超过

默认的4M空间,而导致接下来所有注入方法都不能够执行。

解决方案,大体上两种,一种是加大PermSize,我用的安装版tomcat,所以就使用管理工具加了几个参数。从此世界平静了。

-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:ReservedCodeCacheSize=48M

第二种就是使用oracle的BEA JDK,因为这个里面的JVM没有PermGen space这样的区域,所以也就不存在这样溢出的问题。但是因为jrockit比较消耗

资源,所以我只推荐在生产环境中使用,开发环境还是sun的比较省。

从这个角度来说sun jvm这个不能动态增加PermGen space大小,从03年提出到现在一直未能解决,也确实够让人失望的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值