eclipse中“Java Runtime Environment的内存不足”消息

当我在Eclipse中运行我的Java代码时,我收到以下消息:

There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (malloc) failed to allocate 4088 bytes for AllocateHeap An error report file with more information is saved as: E:\Eclipse_Workspace\BTest\hs_err_pid1888.log 

我的电脑里有4GB RAM。 我也将我的JRE从1.7改为1.8。 但问题似乎未得到解决。 我使用带有i3处理器的Win 8系统,在我的C盘中有大约20GB的可用磁盘空间。

Eclipse版本:Eclipse Juno Service第2版

我也在启动Eclipse时收到此消息。 我已附上错误消息屏幕截图。

是什么导致了这个问题?

在此处输入图像描述

“eclipse.ini”文件中的内存参数:

 -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Dhelp.lucene.tokenizer=standard -Xms40m -Xmx512m 

解决方法:重新安装eclipse修复了问题。

上面的消息意味着您在PC上运行了如此多的程序,以至于没有剩余的内存可以再运行一次。 这不是Java问题,没有Java选项会改变这一点。

使用Windows的任务管理器查看您的4GB RAM实际上有多少空闲 。 我的猜测是,在某个地方,你有一个程序可以吃掉所有的记忆。 找到并杀死它。

编辑您需要了解有两种类型的“内存不足”错误。

第一个是OutOfMemoryException,它是在Java代码运行且Java 不够大时得到的。 这意味着Java 代码向Java 运行时请求内存。 你可以用-Xmx...解决这个问题-Xmx...

另一个错误是Java 运行时内存不足。 这根本与Java堆无关。 当Java要求操作系统获得更多内存时,这是一个错误,操作系统说:“抱歉,我没有。”

要修复后者,请关闭应用程序或重新启动(以清除内存碎片)。

即使运行简单命令,如何诊断此错误:

 java -version # # There is insufficient memory for the Java Runtime Environment to continue. # Cannot create GC thread. Out of system resources. # An error report file with more information is saved as: # /home2/ericlesc/code/java/c2/hs_err_pid23944.log 

检查您拥有的可用内存量:

 free -m total used free shared buffers cached Mem: 28119 26643 1475 189 2391 15368 -/+ buffers/cache: 8884 19235 Swap: 5117 34 5083 

检查最大用户进程数,确保没有超出限制:

 ulimit -a ps -ef | wc -l 

对我来说,之所以发生这种情况,是因为PHP在bluehost上占用了太多的内存,而我能够修复它的方式,无需重启PHP或服务器(我不能)就是采取了public_html目录,重命名。 并给PHP一分钟看看更改,然后重命名。

php引擎本身的一个bug。 我找到了一个聪明的方法来快速给PHP引擎。

(2016年2月更新) (由于Bluehost实例PHP引擎正在保留所有内存并且没有为JVM留下任何内容,因此我获得了大量的选票。在他们的辩护中,PHP正在演变成一个邪恶的rube Goldberg机器。随着服务的下降。

如果您使用的是虚拟机(VM), 请为VM分配更多RAM,您的问题将得到解决。

Eclipse安装目录中,您应该能够找到eclipse.ini文件。 打开它,找到-vmargs部分。 调整值:

 -Xmx1024m 

在此示例中,它设置为1GB。

尝试用下面的方法修改你的eclipse.ini

 -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807 -product org.eclipse.epp.package.jee.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 512M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 512m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Dhelp.lucene.tokenizer=standard -Xms2G -Xmx3G -XX:MaxPermSize=2G -XX:+UseCompressedOops -XX:+UseParallelGC 

一旦你打开你的日食,你可以尝试下面

看起来您的应用程序消耗的内存多于分配的内存(默认)。 我会尝试两件事

  1. 正如Harmlezz所建议的那样,将你对JVM的内存分配增加到-Xms2g -Xmx2g(如果需要,可以增加它并尝试一下)

  2. 下载eclipse内存分析器并检查导致内存泄漏的原因,甚至可以使用JConsole查看JVM内存利用率以找出应用程序内存泄漏问题。

您的应用程序(Eclipse)需要更多内存,JVM没有足够的分配。您可以按照此处给出的答案增加JVM分配的内存量

如果你在ec2上并希望做mvn build,那么使用-T选项告诉maven在构建时使用线程数

例如: mvn -T 10 clean package

您需要诊断jvm用法,例如正在运行的进程数以及堆分配。 例如,有很多方法可以做到这一点

  • 你可以使用java jcmd来检查对象的数量,内存的大小(对于linux你可以使用例如“/usr/jdk1.8.0_25/bin/jcmd 19628 GC.class_histogram> /tmp/19628_ClassHistogram_1.txt”,这里19628是正在运行的应用程序进程id)。 您可以轻松检查代码中是否存在任何强引用。