论坛首页 Java企业应用论坛

分析java.lang.OutOfMemoryError: PermGen space

浏览 174595 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-05-18  
另外使用JRockit可以规避这个问题不是因为JRockit的GC有什么特别,而是JRockit里没有permanent generation这个概念,所以就不存在permanent generation memory leak的问题。
0 请登录后投票
   发表时间:2007-05-19  
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
1 请登录后投票
   发表时间:2007-05-19  
抛出异常的爱 写道
就快可以自己写jdk了。。。。

要是我懂C,我也搞个简单的玩下。
纯粹是吹牛
0 请登录后投票
   发表时间:2007-05-21  
我也遇到过这个问题,查阅的资料都说是sun的GC对byte及char数组的回收有问题。
0 请登录后投票
   发表时间:2007-05-21  
哎,我开发中常遇到这样的问题,希望能够通过上面的一些方法能够解决这个问题.
0 请登录后投票
   发表时间:2007-05-23  
碰到过这样的问题,也是通过设置JVM的参数解决的
0 请登录后投票
   发表时间:2007-05-24  
看来这个问题比较有普遍性,csdn上也有人在讨论:JDK5.0垃圾收集优化之--Don't Pause

http://blog.csdn.net/calvinxiu/archive/2007/05/18/1614473.aspx

深入浅出地讲解了JVM垃圾收集的机制,并且提出几个解决方案。

”可设置-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled,使CMS收集持久代的类,而不是fullgc,netbeans5.5 performance文档的推荐。“
0 请登录后投票
   发表时间:2007-05-26  
其实不能说是SUN的设计缺陷吧,permanent SPACE大小不是可以调的吗,JSP应用容易产生这个问题,我们用SWING客户端,很少碰到这个问题。另外这篇文章里怎么说可以设置GC呢?
http://www.javaworld.com/javaworld/jw-06-2006/jw-0619-tuning.html?page=7
disnable –noclassgc
0 请登录后投票
   发表时间:2007-05-27  
Qieqie 写道
单纯 “spring在AOP时使用CBLIB会动态产生很多类” 不至于对Perm空间产生威胁。
因为这些代理产生的类也是常量数目:即每个类只会产生一个代理类,不会每次调用都产生新的代理类。

把Perm开大点吧,应该就不会有问题


我对spring没有特别的研究,但JVM的垃圾收集有时候确实会发生这种事情.特别是产生类比较多的时候!垃圾收集没有及时的回收.但奇怪的是我的程序并没有挂断,而是用了很高的内存,之后又逐步逐步的降低!
还有eclipse如果项目比较大很多类的时候,2G的内存都不够吃.所以启动eclipse的时候我也加了-Xms之类的,呵呵
0 请登录后投票
   发表时间:2007-05-28  
一个应用(jvm)中类的个数应该小于某个常量,像创建对象一样频繁的创建类不出问题才怪。

楼主仔细检查一下代码,cglib如果不用Factory会有上述情况出现。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics