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.ini
http://wiki.eclipse.org/Eclipse.ini
3.Oracle/Sun VM 1.6.0_21 on Windows
http://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
分享到:
相关推荐
java.lang.OutOfMemoryError: PermGen space 解决方案
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space 解决方法
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
Tomcat给我的java.lang.OutOfMemoryError: ... PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGenTomcat给我的java.lang.OutOfMemoryError: PermGen
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案
解决OutOfMemoryError: PermGen space,过程是痛苦的,结果是舒畅的
NULL 博文链接:https://geyubin.iteye.com/blog/779330
java解决nested exception is java.lang.OutOfMemoryError Java heap space 解决OOM
记录java.lang.OutOfMemoryError:Java heap space的情况 文章内容: 一.问题描述+原因分析+解决方案 二.JVM调优说明 三.Tomcat添加到jvisualvm监控
Myeclipse下java.lang.OutOfMemoryError Java heap space的解决
java.lang.OutOfMemoryError: Java heap space 解决方法
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
java.lang.OutOfMemoryError处理错误
编译时出现java.lang.OutOfMemoryError Java heap space异常.