遇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年提出到现在一直未能解决,也确实够让人失望的。
作者:Steven(Steven's Think out)
出处:http://shiyangxt.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库