`

解决MyEclipse内存不足

 
阅读更多
做项目的时候,MyEclipse提示内存不足,我本本内存2G的呀。
错误提示大概如下:
MyEclipse has detected that less than 5% of the 64MB of Perm
Gen (Non-heap memory) space remains. It is strongly recommended
that you exit and restart MyEclipse with new virtual machine memory
paramters to increase this memory.   Failure to do so can result in
data loss. The recommended Eclipse memory parameters are:
eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

以下是我的MyEclipse快捷方式的参数:
"D:\Eclipse 3.2.2\eclipse.exe" -product com.genuitec.myeclipse.product.ide -vmargs -Duser.language=en -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M   -Dosgi.splashLocation="d:\MyEclipse 5.0GA\eclipse\MyEclipseSplash.bmp"

对于MyEclipse的话,直接修改MyEclipse在桌面的快捷方式的参数就可以啦。现在解释这些参数的意思。

-vmargs:说明后面是VM的参数
-Xms40m:虚拟机占用系统的最小内存
-Xmx256m:虚拟机占用系统的最大内存
-XX:PermSize:最小堆大小。一般报内存不足时,都是说这个太小,
                      堆空间剩余小于5%就会警告,建议把这个稍微设
                           大一点,不过要视自己机器内存大小来设置
-XX:MaxPermSize:最大堆大小。这个也适当大些
-Xmx512M的5%为25.6M,理论上要求-Xmx的数值与-XX:MaxPermSize必须大于25.6M

把里面的参数改为
-vmargs 
-Xms128M 
-Xmx512M 
-XX:PermSize=128M 
-XX:MaxPermSize=256M

所以对于我而言,我只要把我的MyEclipse5.0改-XX:PermSize=128M -XX:MaxPermSize=256M,问题解决!
(个人补充一点:参数在你安装的exlipse目录下的eclipse.ini文件中)

   这一段时间,Eclipse总是死掉,几乎是稍微操作快一点就会死掉,几分钟一次,搞得人郁闷至极。浪费了不少时间,在网上搜了下,看到很多朋友也出现类 似的情况,在网上求救,但是网上的办法都只是说通过修改eclipse.ini文件来加大Eclipse的内存。

自己试了下,发现不管用。今天,又死掉了,不过爆出一个经常出现的错误,大意是:permgen space导致内存溢出。实在忍无可忍,上网一搜,发现网络真是个好东西,尤其是对我们这种自学者而言,无疑是授业解惑的良师益友。

这里总结一下自己的经验和网友的经验,希望能够对受此问题折磨的朋友有所参考价值。

解决办法如下:

在eclipse.ini配置文件中加上以下两行
-XX:PermSize=128M
-XX:MaxPermSize=128M

加上上2行后,我的eclipse.ini文件如下所示:

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
-vmargs
-Xms256m
-Xmx512m
-XX:PermSize=128M
-XX:MaxPermSize=128M

这里的内存大小根据自己的物理内存情况来决定吧。

从网上的资料看PermSize大一点肯定更好,而且最好是设置PermSize和MaxPermSize一样大。理由如下:
PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。



1、PermGen space简介

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。

说说为什么会内存益出:
(1)这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同。
(2) GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。


解决方法: 手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.sh,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?
下面我们一一进行回答
1. 各个参数的含义什么?
参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?
那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:
参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:
-vm
C:\Java\jre1.6.0\bin\javaw.exe
按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。
另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了,所以这里可以把–launcher.XXMaxPermSize和下一行使用#注释掉。

3. 其他的启动参数。 如果你有一个双核的CPU,也许可以尝试这个参数:

-XX:+UseParallelGC

让GC可以更快的执行。(只是JDK 5里对GC新增加的参数)

补充:

可以在myelipse里选中相应的服务器比如tomcat5,展开里面的JDK子项页面,来增加服务器启动的JVM参数设置:

-Xms128m
-Xmx256m
-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m



以前所用:-vmargs-Xms256m-Xmx512m-XX:PermSize=512M-XX:MaxPermSize=1024M
分享到:
评论

相关推荐

    MyEclipse经常报内存不足解决方案

    解决MyEclipse内存不足的首要步骤是调整JVM的内存参数。这些参数通常在MyEclipse的启动配置中设置,包括初始堆大小(Xms)、最大堆大小(Xmx)以及 PermGen 空间(对于较旧版本的Java)。在MyEclipse的安装目录下,...

    MyEclipse内存不足处理方案.txt

    为了解决MyEclipse内存不足的问题,可以通过调整虚拟机内存参数来优化环境配置。以下是一些具体的步骤和建议: 1. **调整虚拟机内存参数**: - 使用命令行启动MyEclipse时,可以加入以下参数: ``` eclipse.exe ...

    MyEclipse内存不足问题

    标题与描述概述的知识点主要集中在解决MyEclipse内存不足的问题上,这通常发生在处理大型项目或资源密集型任务时。以下是对这些知识点的详细解析: ### 修改eclipse.ini 在MyEclipse的安装目录下,存在一个名为`...

    JVM参数配置及MyEclipse内存不足.rar

    下面我们将深入探讨JVM参数配置以及如何解决MyEclipse内存不足的问题。 1. JVM内存模型: JVM内存主要分为几个区域:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈...

    MyEclipse内存不足谈谈JVM内存

    ### MyEclipse内存不足与JVM内存管理 #### 1. 各个参数的含义 在探讨具体的参数之前,我们先来了解下JVM内存管理的基本...通过上述分析,我们可以更好地理解JVM内存管理机制以及如何解决MyEclipse内存不足的问题。

    java 虚拟机参数配置说明及Myeclipse内存不足

    此外,合理配置JVM参数不仅可以解决MyEclipse内存不足的问题,还能提高整体应用性能。但需要注意,过大的内存分配可能导致系统资源浪费,因此需要根据实际负载情况进行精细化调整。 总之,理解并熟练运用Java虚拟机...

    myeclipse内存溢出问题解决方案

    总结来说,解决MyEclipse内存溢出问题需要理解Java内存模型和JVM参数设置,合理分配堆内存、新生代和永久代的大小。通过监控和调整这些参数,可以有效地避免内存溢出问题,提升应用的稳定性和性能。

    打造极速MyEclipse+由MyEclipse内存不足谈谈JVM内存

    然而,随着项目规模的扩大,MyEclipse可能会遇到内存不足的问题,这将导致启动缓慢、卡顿甚至崩溃。解决这个问题的关键在于理解和优化JVM(Java Virtual Machine)内存设置。 JVM是Java程序运行的基础,它负责解析...

    myeclipse内存溢出解决方法

    以下是一些解决MyEclipse内存溢出问题的方法: 1. 修改`eclipse.ini`配置文件: MyEclipse的启动配置文件`eclipse.ini`位于MyEclipse安装目录下的特定路径,例如`G:\MyEclipse8.5\Genuitec\MyEclipse 8.5`。在这个...

    myeclipse内存溢出问题

    ### MyEclipse内存溢出问题解析与解决策略 #### 一、问题背景 在使用MyEclipse集成开发环境(IDE)进行项目开发时,开发者可能会遇到内存溢出的问题。这通常表现为应用程序运行过程中突然出现错误提示,导致程序...

    导致MyEclipse内存不足的原因分析及解决办法

    针对MyEclipse内存不足的问题,我们可以通过以下步骤进行原因分析及提出相应的解决办法: 1. 通过修改配置文件来增加MyEclipse的内存分配。 - 找到MyEclipse安装目录下的myeclipse.ini或eclipse.ini配置文件,打开...

    MyEclipse 内存溢出

    【标题】"MyEclipse 内存溢出"所涉及的知识点主要集中在Java开发环境的配置和优化上,特别是针对大型项目或者复杂代码时可能...通过以上方法,一般可以有效解决MyEclipse的内存溢出问题,提高开发环境的稳定性和效率。

    myeclipse 解决内存的问题

    #### 二、MyEclipse内存问题成因分析 1. **自动更新检查**:MyEclipse默认会在启动时检查是否有新功能或更新,这一过程会占用一定的系统资源。 2. **索引更新**:MyEclipse会定期更新项目依赖的索引,这个过程同样...

    解决MyEclipse耗内存的办法

    这篇文章将深入探讨这个问题,并提供一系列解决MyEclipse内存消耗过大的方法。 首先,针对“Quick Update error”,这是由于MyEclipse尝试自动检查并安装更新时引发的错误。为了解决这个问题,我们可以禁用...

    解决MyEclipse吃内存以及卡死的方法

    ### 解决MyEclipse吃内存及卡死的问题 在日常开发工作中,经常遇到MyEclipse占用大量内存甚至导致程序卡死的情况,这不仅影响工作效率,还可能造成数据丢失等问题。本文将详细介绍如何解决这些问题,帮助开发者提高...

    解决MyEclipse运行项目内存溢出问题(原创-手写)

    解决MyEclipse运行项目内存溢出问题,下载后是个txt文件,里面包含了解决的步骤

    解决flex 4.6内存不足myeclipse中无法加载设计模式

    解决flex 4.6内存不足myeclipse中无法加载设计模式 1 解决flexbuilder4无法加载设计模式内存不足的方法为先新建一java工程,再新建flex项目 2(1). 调整FlashBuilder eclipse.ini 编辑 {FlashBuilder 安装路径}/...

    解决myeclipse自动关闭问题.txt

    3. **内存不足**:如果计算机内存较小或者分配给MyEclipse的内存不足,也可能会导致自动关闭。 4. **系统兼容性问题**:有时候操作系统与MyEclipse之间可能存在兼容性问题,尤其是在使用新版本的操作系统时。 5. **...

    解决MyEclipse7.0速度慢秘诀

    其中,导致MyEclipse运行速度慢的一个常见原因是JVM的非堆内存不足。为了解决这个问题,可以通过修改`myeclipse.ini`文件来增加非堆内存的大小。 1. **打开myeclipse.ini文件**:首先找到安装目录下的`myeclipse....

    解决myeclipse导java包死机问题

    6. **检查硬件配置**:如果硬件配置较低,比如CPU或内存不足,也可能导致MyEclipse运行缓慢。升级硬件,尤其是增加RAM,可以显著改善性能。 7. **使用外部构建工具**:对于构建过程,可以考虑使用Maven或Gradle等...

Global site tag (gtag.js) - Google Analytics