`
zpball
  • 浏览: 919581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse的内存优化与内存不足问题

阅读更多


最近我的Eclipse总是崩溃 ,慢的要命,1G的内存好像也没用完阿,气死我了, 错误提示:

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

eclipse根目录下面的 eclipse.ini 配置 从网上搜了些资料

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

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

从网上的资料看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.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:
   JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
  建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存

1。参数的含义

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

参数中-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


分享到:
评论

相关推荐

    Eclipse的内存优化与内存不足问题.pdf

    ### Eclipse的内存优化与内存不足问题 #### 一、引言 在开发过程中,经常会遇到IDE(集成开发环境)如Eclipse运行缓慢甚至崩溃的情况,这往往与内存管理不当有关。本文将详细介绍如何针对Eclipse进行内存优化,解决...

    eclipse内存优化

    ### Eclipse内存优化详解 在IT领域,特别是在Java开发中,Eclipse作为一个广泛使用的集成开发环境(IDE),其性能和稳定性对开发效率有着直接的影响。然而,由于Eclipse本身较为复杂的功能和架构,它可能会消耗大量...

    解决 Eclipse内存不足的问题

    这个问题通常表现为Eclipse频繁弹出对话框,提示“Java虚拟机(JVM)运行时内存不足”,影响了开发效率。本文将详细介绍如何解决Eclipse内存不足的问题。 首先,我们需要理解为什么会出现这种情况。Eclipse在启动时...

    eclipse 内存不足的问题

    ### Eclipse 内存不足问题详解及解决方案 #### 一、问题背景 在使用Eclipse进行软件开发时,可能会遇到一个常见的问题:Eclipse提示“内存不足”。这种情况通常发生在处理大型项目或者开启多个工作空间时。当...

    Eclipse 设置、调优、使用(解决 卡顿 编译 占内存等问题)

    Eclipse 是一个功能强大且灵活的集成开发环境(IDE),但是如果不进行适当的设置和优化,可能会出现卡顿、内存占用过高等问题。以下是 Eclipse 设置、调优和使用的一些知识点: 一、Eclipse 启动优化 1. 减少 JVM ...

    eclipse内存溢出的解决办法.txt

    ### Eclipse内存溢出问题及其解决方法 在使用Eclipse开发工具的过程中,经常会出现“内存溢出”(Out of Memory Error)的问题,这主要是由于Eclipse运行时所分配的内存不足导致的。当出现这种情况时,不仅会影响...

    eclipse解决内存溢出的问题

    在了解如何解决内存溢出之前,我们先来了解一下导致Eclipse内存溢出的原因: 1. **项目规模过大**:当项目的代码量和资源文件非常多时,Eclipse需要消耗更多的内存来加载这些文件。 2. **缓存和临时文件积累**:...

    设置Eclipse内存参数

    然而,在处理大型项目或运行复杂应用时,经常会出现内存溢出的问题,这主要是由于Eclipse分配的内存不足导致的。本文将详细介绍如何根据不同的场景来设置Eclipse的内存参数,从而有效地避免内存溢出问题。 #### 一...

    Eclipse监视内存插件(Kyrsoft)

    Eclipse内存管理主要涉及到Java虚拟机(JVM)的内存模型。Java内存分为堆内存和非堆内存两大部分。堆内存主要用于存储对象实例,非堆内存则包含了JVM自身所需的内存,比如类加载器、方法区和线程栈。垃圾收集器负责...

    eclipse和tomcat的内存配置

    ### Eclipse与Tomcat的内存配置详解 #### 一、引言 在开发环境中,合理配置Eclipse和Tomcat...总之,合理的内存配置不仅能提升开发效率,还能避免因内存不足导致的应用崩溃等问题,对于保障项目顺利进行具有重要意义。

    Eclipse运行工程内存溢出解决方法

    解决Eclipse内存溢出问题的步骤如下: 1. 找到Eclipse的启动配置文件,通常是`eclipse.ini`,位于Eclipse安装目录下。 2. 在`eclipse.ini`文件中,找到`-vmargs`行,接着在其下方添加内存参数。按照你的工程需求,...

    eclipse 内存溢出解决办法

    #### 一、PermGen Space 概念与问题成因 在Java虚拟机(JVM)中,PermGen Space(Permanent Generation Space)是专门用于存储Class和Meta信息的一个区域。当一个Class被加载到JVM时,它的元数据(包括类定义、常量...

    Eclipse 内存报错

    Eclipse是一款广泛使用的Java开发...了解并掌握这些知识点,有助于你有效地解决Eclipse内存报错的问题,提高开发效率,避免不必要的中断。在日常工作中,适时调整和优化Eclipse的内存配置,对于提升开发体验至关重要。

    eclipse性能优化

    【Eclipse性能优化】在开发过程中,Eclipse作为一款强大的Java集成开发环境,有时在处理重量级框架或大型项目时可能会出现性能问题,如编辑jsp、js文件时卡死等现象,这严重影响了开发效率。以下是一些针对Eclipse...

    eclipse内存溢出报错-解决办法

    然而,在使用过程中,用户可能会遇到“eclipse内存溢出报错”的问题,这一现象通常表现为Java.lang.OutOfMemoryError: Java heap space错误,这主要源于Eclipse运行时分配给Java虚拟机(JVM)的内存不足,导致程序...

    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    本文将详细介绍如何利用 Eclipse Memory Analyzer (MAT) 工具来诊断并解决 Tomcat 服务器上的 Java 应用程序内存溢出问题。 #### 二、内存溢出的原因及处理思路 ##### 2.1 内存泄露 - **定义**:内存泄露是指不再...

    tomcat_eclipse配置内存溢出

    通过上述配置,可以有效解决由内存不足引起的`java.lang.OutOfMemoryError: PermGen space`等问题。在实际操作中,可以根据实际情况灵活调整这些参数的值,以达到最佳的性能表现。此外,建议定期清理不必要的类加载...

    eclipse内存溢出处理

    本文将深入解析Eclipse内存溢出的原因、表现形式以及如何通过调整JVM参数来有效解决此问题。 ### 一、内存溢出的基本概念 内存溢出是指程序运行时,申请的内存超过了系统所能分配的最大内存空间,导致程序无法继续...

    eclipse内存分析插件mat的使用

    总之,Eclipse内存分析插件MAT是一个强大而实用的工具,对于优化Java应用的内存管理、预防和解决内存泄漏问题具有重要作用。开发者应熟练掌握其使用方法,以便在遇到性能问题时能够快速定位并修复。

    eclipse配置优化

    例如,可以将 `-Xms`、`-Xmx`、`-Xmn` 等设置与上述相同,以优化Eclipse的内存使用。 - 另外,可以考虑关闭不必要的Eclipse插件和服务,减少启动时的负担。在 `eclipse.ini` 文件中,通过 `-plugin` 参数来管理插件...

Global site tag (gtag.js) - Google Analytics