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 解决方案
总之,"java.lang.OutOfMemoryError: PermGen space"错误是由于Java虚拟机的 PermGen 区域内存不足造成的,可以通过增大 PermGen 区域的大小、升级JVM版本、优化类加载和库的使用等方式来解决。对于任何内存管理问题...
### Java.lang.OutOfMemoryError: PermGen space 及其解决方法 #### 一、PermGen space 概述 在Java虚拟机(JVM)中,PermGen space(永久代)是用于存储类的信息、常量、静态变量等数据的区域。在Java 8之前,Perm...
Eclipse 中通过 Tomcat 运行 J2EE 项目 java.lang.OutOfMemoryError PermGen space 的解决方案 在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于...
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
在Java编程中,我们常常会遇到一个让人头疼的问题,那就是“java.lang.OutOfMemoryError: PermGen space”错误。这个错误提示表明,应用程序在运行过程中,内存的永久代(Permanent Generation)空间不足,导致了...
本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...
### 解决OutOfMemoryError: PermGen space 在Java应用程序运行过程中,可能会遇到“OutOfMemoryError: PermGen space”的错误提示。这种错误通常发生在永久代(PermGen space)内存不足的情况下,永久代主要用于...
### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...
4. **调整PermGen空间**:在Java 8之前, PermGen 区域用于存储类的元数据,如果这个区域耗尽,会出现`java.lang.OutOfMemoryError: PermGen space`错误。在Java 8中,这部分被MetaSpace取代,可通过`-XX:...
在Tomcat中java.lang.OutOfMemoryError: PermGen space异常处理: 1. PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的。 2. Class在被Loader...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...
Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存...通过上述方法,可以有效地预防和解决`java.lang.OutOfMemoryError: Java heap space`问题,优化JVM内存管理,提升应用程序的稳定性和性能。
5. **增大PermGen或Metaspace大小**:如果你看到 `OutOfMemoryError: PermGen space` 或 `Metaspace`,这是方法区溢出,可以通过 `-XX:MaxPermSize` (对于老版本JVM) 或 `-XX:MaxMetaspaceSize` (对于Java 8及以后...
java.lang.OutOfMemoryError: Java heap space 解决方法