转自:
http://hi.baidu.com/like_dark/blog/item/19c1948b3292b0799f2fb468.html
Eclipse的内存优化与内存不足问题2008年09月11日 星期四 14:28最近我的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
分享到:
相关推荐
2. 使用Eclipse内存分析工具:通过"Window" -> "Preferences" -> "General" -> "Startup and Shutdown" -> "Performance"中的"Memory Analyzer"选项,分析Eclipse的内存使用情况,以确定是否有内存泄露。 五、更新...
本资料包"**Eclipse全面提速小技巧.zip**"提供了一系列实用技巧,旨在帮助用户优化Eclipse的性能,使其运行更加流畅。 首先,我们来看"**1禁用插件.jpg**",这提示我们需要关注Eclipse中的插件管理。过多或不必要的...
- Java开发:Eclipse是Java开发的首选IDE,内置了全面的Java语言支持,包括代码补全、语法高亮、重构工具等。 - 多语言支持:除了Java,Eclipse还支持C/C++、Python、JavaScript等多种语言的开发。 - 版本控制...
#### Q2: 如何解决Eclipse 3.4.2运行时出现的内存不足问题? 可以通过修改Eclipse的启动脚本中的JVM参数来增加分配给Eclipse的最大内存。例如,在`eclipse.ini`文件中添加或修改以下行: ``` -vmargs -Xms128m -Xmx...
- **Java 9支持**:2018年的Eclipse版本增加了对Java 9的全面支持,包括模块化系统(Jigsaw)和其他新特性的集成。 - **改进的代码编辑器**:Eclipse的代码编辑器进行了优化,提供了更智能的代码完成、错误检测和...
9. **团队协作**:Eclipse支持集成各种协同工具,如即时通讯、问题追踪系统(如JIRA)和持续集成服务器(如Jenkins),促进团队间的沟通与合作。 10. **学习资源**:由于Eclipse的广泛使用,网络上有很多教程和社区...
7. **性能提升**:Eclipse Mars针对启动速度和内存使用进行了优化,减少了启动时间和内存占用,提高了整体性能。 8. **插件生态系统**:Eclipse Mars继续支持丰富的插件生态系统,开发者可以根据需要安装各种插件,...
综上所述,Eclipse Oxygen是一个强大且全面的Java开发工具,它以其高效的代码编辑、丰富的功能集、优化的性能以及广泛的插件支持,深受Java开发者喜爱。搭配JDK的使用,可以搭建一个完善的Java开发环境,从而高效地...
在版本控制方面,Eclipse Mars加强了与Git的集成,提供了更丰富的Git操作选项,如可视化冲突解决工具,以及改进的分支和标签管理。这使得开发者能够更高效地处理版本控制问题,特别是在团队协作中。 Eclipse Mars还...
9. **性能优化**:Eclipse 4.6.2着重于启动速度和内存管理的优化,减少了内存占用,提升了整体性能。 10. **Web和JavaScript开发**:对于Web和JavaScript开发者,Eclipse 4.6.2包含了WTP(Web Tools Platform)和...
10. **问题解决与性能优化**:提供故障排查技巧,包括日志查看、性能分析和内存检测,帮助用户解决开发过程中遇到的问题,优化Eclipse的性能。 11. **Eclipse社区与更新**:介绍Eclipse社区,包括论坛、邮件列表和...
同时,这个版本可能修复了一些之前版本中存在的问题,提高了用户体验,比如启动速度的提升、内存管理的优化等。 对于Java开发者,Eclipse 2023-06可能还集成了最新的Java开发工具(JDT)。随着Java语言的发展,例如...
以下将详细介绍Eclipse Luna版本的一些核心特性、优势以及与Java IDE相关的知识点。 1. **Eclipse Luna简介**: Eclipse Luna是Eclipse IDE的第4.4版本,它引入了全新的UI主题,提升了界面的清晰度和可读性。此外...
4. **参与社区**:加入Eclipse 社区,与其他开发者交流,获取问题解答和最新资讯。 通过以上介绍,我们可以看到Eclipse 5.0 不仅为Java开发提供了一个全面的平台,还为初学者提供了学习和进阶的良好环境。随着对...
内存分析工具可以帮助开发者优化资源消耗,避免内存泄漏问题。日志查看器则提供了详细的运行时信息,方便开发者诊断应用运行时的问题。 总的来说,Eclipse ADT 23.0.2与Android 20的组合,为开发者提供了强大而稳定...
它通常包含所有基本功能,并且经过优化以适应32位操作系统,确保内存管理和性能表现。 **三、Eclipse的安装与使用** 下载解压后的“eclipse”文件,双击运行“eclipse.exe”启动Eclipse IDE。首次启动时,用户需要...
- **性能优化**:针对Eclipse的性能问题,可以通过调整Eclipse.ini文件中的内存分配参数来优化。 通过以上内容的学习,相信读者已经对Eclipse有了较为全面的了解,无论是初次接触还是已有一定基础的开发者,都可以...
5. **性能提升**:Eclipse Luna对启动速度、内存占用以及整体响应速度都进行了优化,使得开发环境更加流畅。 6. **版本管理**:Luna版本的Eclipse集成了Git版本控制系统,提供了一流的Git支持,包括图形化的提交...
在Eclipse集成开发环境中运行DBeaver,需要满足一系列依赖条件,以便确保工具能够顺利运行并提供全面的功能。以下将详细介绍DBeaver在Eclipse上的运行依赖及其相关知识点。 1. **Eclipse插件系统**: DBeaver在...