`

java.lang.OutOfMemoryError: PermGen space errors解决办法

阅读更多
java.lang.OutOfMemoryError: PermGen space errors
今天特别郁闷,弄个eclipse的错误弄了半天,囧~
大致说的是说什么jvm的内存漏出了。要修改jvm永久内存区的大小,网上的方法改了也还是一直错。什么加上
引用

-XX:MaxPermSize=256m
-XX:MaxNewSize=256m
都行不通。
看了eclipse的英文论坛和wiki的eclipse各页面说明:介绍说,是这个sun/oracle的jdk1.6.0_21有问题。
说可以考虑使用bea或者ibm那些的jdk。
引用
The best way to really eliminate PermGen problems is to run Eclipse against non-Sun JVM, e.g. IBM J9 and BEA WebRockit. Note that while "normal" download of Windows version of IBM JVM is intended only for upgrade of old IBM computers, IBM site contains special distribution of Eclipse prepackaged with IBM JVM.

不过好像那个jdk的版本改了,现在是1.6.0-22版了。
http://wiki.eclipse.org/FAQ_How_do_I_increase_the_permgen_size_available_to_Eclipse%3F
1.FAQ How do I increase the permgen size available to Eclipse
2.Eclipse.inihttp://wiki.eclipse.org/Eclipse.ini
3.Oracle/Sun VM 1.6.0_21 on Windowshttp://wiki.eclipse.org/FAQ_How_do_I_run_Eclipse%3F#Find_the_JRE
看看这个说明就知道有问题了:
引用
The Eclipse 3.3 - 3.6 launchers for Windows had a problem with the Oracle/Sun Java VM version '1.6.0_21-b06'.

UPDATE: Oracle/Sun have released a respin of their JDK/JRE to fix this, so the recommended resolution of this problem is to

还有这个链接说的也蛮详细的:
http://www.eclipse.org/forums/index.php?t=msg&th=171988&start=0&S=404fe750f2e7196f4c1d669b0f5a5678
这里这个说明6.0.21那个bug
https://bugs.eclipse.org/bugs/show_bug.cgi?id=319514

如果是以前的版本出现内存泄露的这个问题,大概修改配置文件可以解决,如果是那个6.0.21的,大伙就去换版本吧。
下面看看wiki维基给的解决办法吧:
引用
The Eclipse 3.3 - 3.6 launchers for Windows had a problem with the Oracle/Sun Java VM version '1.6.0_21-b06'.

UPDATE: Oracle/Sun have released a respin of their JDK/JRE to fix this, so the recommended resolution of this problem is to download and re-install version 1.6.0_21-b07' or higher from http://www.java.com (alternative link is http://java.sun.com/javase/downloads/index.jsp). Make sure you have b07 or higher by running java -version.

Before the fix was released, there were three choices to work around this:

   1.switch back to '1.6.0_20' (as of July 19, 2010 it can still be downloaded here)
     2.Change the commandline for launching or add the following line after "-vmargs" to your Eclipse.ini file:
-XX:MaxPermSize=256m
(Detailed instructions/examples)
   3.For 32-bit Helios, download the fixed eclipse_1308.dll and place it into

(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v2010050

The Java bug was closed for voting and comments at 6969236 on the Java BugParade because the change has been reverted; the related Eclipse bug report is open for voting and comments at bug 319514.

大意就是说:
1.返回到1.6.0.20版本不要用哪个21的,不过现在好像已经出了22的版本了。
2.用命令行或者在eclipse.ini里面增加配置
3.如果是32位的 Helios版的eclipse那么就要下载一个补丁了https://bugs.eclipse.org/bugs/attachment.cgi?id=174640

A:JVM启动参数共分为三类:
        其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
        其二是非标准参数(-X),指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,并不保证所有jvm实现都满足,所以为了提高性能,往往需要调整这些参数,以求系统达到最佳性能。另外这些参数不保证向后兼容,也即是说“如有变更,恕不在后续版本的JDK通知”(这是官网上的原话);
        其三是非Stable参数(-XX),这类参数在jvm中是不稳定的,不适合日常使用的,后续也是可能会在没有通知的情况下就直接取消了,需要慎重使用。
B:而JVM 内存又可分为三个主要的域 :
        新域、旧域以及永久域。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便进入旧域。而在永久域中是用来存储JVM自己的反射对象的,如class和method对象,而且GC(Garbage Collection)不会在主程序运行期对永久域进行清理。其中新域和旧域属于堆,永久域是一个独立域并且不认为是堆的一部分。
C:各主要参数的作用如下 :
        -Xms:设置jvm内存的初始大小
        -Xmx:设置jvm内存的最大值
        -Xmn:设置新域的大小(这个似乎只对 jdk1.4来说是有效的,后来就废弃了)
        -Xss:设置每个线程的堆栈大小(也就是说,在相同物理内存下,减小这个值能生成更多的线程)
        -XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4
        -XX:NewSize:设置新域的初始值
        -XX:MaxNewSize :设置新域的最大值
        -XX:PermSize:设置永久域的初始值
        -XX:MaxPermSize:设置永久域的最大值
        -XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个 Survivor区则用来存放每次垃圾回收后存活下来的对象)
D:常见的错误 :
        java.lang.OutOfMemoryError相信很多开发人员都用到过,这个主要就是JVM参数没有配好引起的,但是这种错误又分两种:java.lang.OutOfMemoryError: Java heap space和java.lang.OutOfMemoryError: PermGen space,其中前者是有关堆内存的内存溢出,可以同过配置-Xms和-Xmx参数来设置,而后者是有关永久域的内存溢出,可以通过配置 -XX:MaxPermSize来设置。
-Xms256m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics