获取“Java堆空间”和“内存不足”时的Eclipse内存设置

当试图在eclipse中启动并运行flex / java项目时,我一直使用Eclipse,Tomcat和JRE获取“内存不足”和“Java堆空间”。

在研究尝试调整内存设置时,我发现有三个地方可以调整这些设置:

  • 的eclipse.ini

  • 窗口>首选项下的JRE设置

  • Catalina.sh或Catalina.bat

在这些不同的地方设置-xms和-xmx有什么区别,这是什么意思?

有没有什么办法来validation这些内存设置是相应的设置?

2GB内存的计算机的最佳-xms和-xmx设置是什么?

任何其他内存提示?

谢谢。

-xms是启动内存(在VM启动时),-xmx是VM的最大内存

  • eclipse.ini:运行eclipse的虚拟机的内存
  • jre设置:java程序的内存从eclipse运行
  • catalina.sh:你的tomcat服务器的内存

首先,我build议你缩小组件抛出“Out of Memory Exception”的问题。

这可能是:

  1. Eclipse本身(我怀疑)
  2. 你的应用程序Tomcat下

JVM参数-xms-xmx表示堆的“启动内存”和“最大内存”。 忘记“开始记忆”。 这现在不会帮助你,如果你确定你的应用程序将快速消耗这个内存量,你只应该改变这个参数。

在生产中,我认为可以更改的唯一参数是Catalina.sh或Catalina.bat文件下的-xmx 。 但是,如果您正在使用configuration的Tomcatdebugging环境直接从Eclipsetesting您的Web应用程序,则可以简单地转到“debuggingconfiguration”>“Apache Tomcat”>“参数”>“VM参数”并在其中设置-xmx

至于2GB的最佳-xmx ,这取决于你的环境和你的应用程序可能需要的请求数量。 我会尝试从500MB到1GB的值。 检查您的操作系统虚拟内存“区域”限制和JVM本身的限制。

在我们的案件中发现了两个问题

  1. 内存正在停止,我们必须将启动perm大小设置为更高的值。 我想这是使用内存更快,然后能够分配它。 在我们的情况下。 -XX:PermSize = 256m -XX:MaxPermSize = 256m

  2. 我们使用的是Clearcase,Eclipse中使用了Rational Clearcase SCM(7.0.0.2)的插件。 该插件是为什么Eclipse坠毁的情况。 而目前我们不知道为什么,但可以很好地为别人知道。 被迫禁用它。

Eclipse中的Tomcat不使用catalina.sh或bat。 要为托pipeTomcat设置内存,请在服务器运行configuration中使用虚拟机设置

当我尝试发布新版本或滥用“标记发生”和“与编辑器链接”function时,我的FLashBuilder会一直崩溃。

按照以下步骤,我已经大大提高了我的闪存性能:http://www.redcodelabs.com/2012/03/eclipse-speed-up-flashbuilder/

尤其是通过将FlashBuilder.ini设置为以下configuration

 -vm C:/jdk1.6.0_25/bin -startup plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar –launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502 -product org.eclipse.epp.package.jee.product –launcher.defaultAction openFile –launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform –launcher.XXMaxPermSize 256m –launcher.defaultAction openFile -vmargs -server -Dosgi.requiredJavaVersion=1.5 -Xmn128m -Xms1024m -Xmx1024m -Xss2m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelGC 

我的硬件configuration是intel i3 cpu,4gb DDR3,windows 7 64Bit。

有很多不同的内存设置是有原因的。

Eclipse内存设置是因为Eclipse是一个大的Java程序。 如果你打算在几个项目中打开大量的文件,那么你会希望给Eclipse更多的内存。 这只是在“企业”系统上的问题,通常个人项目不会使用许多文件句柄或接口。

JRE设置是在运行项目时允许java运行时多less内存。 当你运行一些内存占用的应用程序时,这可能是你想要的。 我运行的math项目需要一些ram,并且必须真正地告诉JRE它没问题,JVM一直假设我的程序处于漏泄失控状态,但是我故意这么做,不得不告诉JVM特别是它被允许使用的。

然后Catalina的内存设置是针对应用服务器Tomcat的。 该服务器需要每个应用程序和并发用户的内存。 这与JRE编号混合,因为您的项目可能是一个Web应用程序,我不知道哪一个需要内存。

Eclipse中的内存也有一些问题,但是对于我们来说,并不是在实际运行时,而是在Eclipse进行刷新(手动或自动)时,或者在尝试构build它时,eclipse崩溃并且关掉。

在日志中有一些信息:

 Heap def new generation total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000) eden space 32320K, 29% used [0x10040000, 0x10994c30, 0x11fd0000) from space 4032K, 49% used [0x123c0000, 0x125aed80, 0x127b0000) to space 4032K, 0% used [0x11fd0000, 0x11fd0000, 0x123c0000) tenured generation total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000) the space 483968K, 26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000) compacting perm gen total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000) the space 58112K, 99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000) No shared spaces configured. 

即使我调整eclipse.ini使用这些值,似乎并没有被应用。

 -showsplash org.eclipse.platform --launcher.XXMaxPermSize 1024M -framework plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar -vmargs -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms512m -Xmx1024m 

有没有看过这个问题呢?
将补充说,使用的项目是非常大的。

我有这些设置:

 -vmargs ... -Duser.name=... -XX:PermSize=256m -XX:MaxPermSize=256m -Xmn128m -Xms256m -Xmx768m 

在将PermSize设置为MaxPermSize之前,Eclipse会随机崩溃。

如果你看到内存不足,那么考虑这是否合理:你真的需要那么多的内存吗? 如果没有(例如,当你没有巨大的对象,并且由于某种原因不需要创build数百万个对象),则可能是你有内存泄漏。

在Java中,这意味着即使不再需要某个对象,也要保留对某个对象的引用。 常见原因是忘记在资源(文件,数据库连接,语句和结果集等)上调用close()。

如果您怀疑内存泄漏,请使用分析器查找哪个对象占用了所有可用的内存。

在尝试构build一个非常大的Flex项目时,我们遇到了堆空间问题,这个问题无法通过增加分配给Ant的内存或通过添加fork = true参数来解决。 它最终成为Flex 3.4.0 sdk中的一个bug。 我终于通过轮询开发者的sdk版本并恢复到3.3.0后得出了这个结论。

对于好奇。

我把这个bug跟踪到了一个接口文件,它有一个额外的访问器对添加了“get / set maskTrackSkin”。 如果有任何附加function被添加到接口,并造成更糟糕的接口不是在项目中获得堆空间错误,堆空间错误命中。 希望这有助于某人。

Adobe Flash Builder 4.6 Read Me.pdfbuild议您编辑Eclipse实例的eclipse.ini文件,以便它包含以下设置:

 -vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m