2012-11-22 22 views
1

我运行一个makefile,并有一段时间我碰到下面的错误后:如何处理java.lang.OutOfMemoryError

java.lang.OutOfMemoryError 

我想知道是否有命令,让我增加 Java堆空间。我不想更改makefile本身,所以我需要 某种“全局”命令,它允许我重置Java堆空间。

非常感谢, 帕特里克

编辑:谢谢您的回答。但是,我要寻找一个更加全球化的命令,即 让我指定要设置的堆空间一劳永逸,如:

SET JAVA_HEAP_SPACE = 5GB

感谢

+0

类似的问题: http://stackoverflow.com/questions/417152/how-do-i-set-javas-min-and-max-heap-size-through-environment-variables –

+0

这是确切的副本http://stackoverflow.com/questions/417152/how-do-i-set-javas-min-and-max-heap-size-through-environment-variables – Jayan

+0

除非你是一个32位的Windows版本,它应该具有最多四分之一的内存。如果这还不够,那么即使整个OpenJDK源代码可以使用默认设置进行编译,您的内部版本也会有些奇怪。顺便说一句:Maven是比Java构建更好的选择。 –

回答

4
  • 可以设置从命令行获得java堆空间:java -Xmx1600m program现在你的堆空间是1600 MB(假设你的硬件已经可以承受1600MB)。

  • 对于Windows平台,你可以从Java运行时环境 设置也是如此。按照控制面板=>程序=> Java。导航到Java选项卡。查看Java运行时环境设置。将-Xmx1600m添加到运行时参数。保存并继续。

  • 对于Linux平台,您可以启动控制面板并编辑运行时参数。它可以运行在/usr/j2se/jre/bin/ControlPanel之类的东西上。找到你自己的目录。读到这里,请:http://docs.oracle.com/javase/7/docs/technotes/guides/deployment/deployment-guide/jcp.html

+0

是的,但这意味着我必须更改生成文件,其中实际执行java构建。我不想这样,我想知道我是否可以为所有执行的Java程序设置堆...... – Patrick

+0

不幸的是,我在Linux上使用命令行。 Windows中是否有类似的东西? – Patrick

+0

@Patrick我也为Linux添加了一个解决方案。请再次检查。 – Juvanis

1

您可以使用下面的命令:

java -Xms64m -Xmx256m ClassName 
Xms<size>  set initial Java heap size 
Xmx<size>  set maximum Java heap size 

在这个例子中,设置为64MB,并最大堆大小初始堆大小设置为256MB。欲了解更多信息,请查询this

0

问题并不十分清楚但是,您应该将-Xmx标志看作JVM启动参数,以便为应用程序提供更多内存。请阅读here了解更多信息。您还应该对Java应用程序进行分析并查看大部分可用内存正在被消耗的位置。你可以利用JProfiler(只是谷歌有关工具来分析你的Java应用程序)来分析和查看有关应用程序哪一部分消耗更多系统资源的统计信息。