Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决

阅读更多

在一个SSH2项目中,使用Javarebel启动程序.由于项目越做越大,终于在启动时报错:

Exception in thread "btpool0-1" java.lang.OutOfMemoryError: PermGen space ...


以前在使用MyEclipse时,经常遇到PermGen space问题,解决办法无非是更改MyEclipse的配置文件,增加其运行

JVM时申请的内存.但是这次是由Javarebel启动程序...


在网上搜了半天也没有太好的解决办法,整个项目组因为这个问题开发进度几乎停滞了两个星期...倒是很有几个帖子写得很深入,值得研究,待以后发帖总结.言归正传,看来也许大家没有解决这个问题?于是想到了Javarebel的官网:http://www.zeroturnaround.com找到
FAQ :http://www.zeroturnaround.com/jrebel/faq,搜索"PermGen space",找到:


Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决_第1张图片


 哈哈,果然有"同道中人"!点击该链接:


Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决_第2张图片

大致意思估计不用金山词霸也能看个七八成.于是照此修改Javarebel的参数:

-Xmx512M -Xms512M -XX:MaxPermSize=1024m

 

问题解决!

 

从网上搜得:http://hi.baidu.com/futily/blog/item/cffb330fb0c22ee4ab6457fc.html很值得阅读.

 

简单作个笔记:

 

堆内存分配:

-Xms     JVM初始分配的内存由-Xms指定,默认是物理内存的1/64

-Xmx    JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4;

默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。

因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

 

 非堆内存分配

-XX:PermSize       JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64

-XX:MaxPermSize  XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4

 

注意:

参数中

        -Xms的值要小于-Xmx

        -XX:PermSize的值要小于-XX:MaxPermSize
        -Xmx的值和-XX:MaxPermSize的总和应不超过JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。

  • Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决_第3张图片
  • 大小: 15.8 KB
  • Javarebel启动程序java.lang.OutOfMemoryError: PermGen space问题的解决_第4张图片
  • 大小: 19.5 KB
  • 查看图片附件

你可能感兴趣的:(Java,JVM,Myeclipse,金山,thread)