在我的项目构建过程中,我遇到了以下错误信息:
java.lang.OutOfMemoryError: Java heap space
如何增加堆空间?我有8GB的内存,很难想象maven会消耗那么多资源。我找到了这个链接,其中介绍了如何在Linux上设置,但我使用的是Windows 7。我该怎样在Windows下更改Java堆空间大小呢?
在我的项目构建过程中,我遇到了以下错误信息:
java.lang.OutOfMemoryError: Java heap space
如何增加堆空间?我有8GB的内存,很难想象maven会消耗那么多资源。我找到了这个链接,其中介绍了如何在Linux上设置,但我使用的是Windows 7。我该怎样在Windows下更改Java堆空间大小呢?
MAVEN_OPTS
,例如:MAVEN_OPTS=-Xmx1024m
。在pom中的maxmem
配置只适用于将编译器插件设置为fork javac
到一个新的JVM时。否则,插件在与Maven相同的VM中运行,因此在通过命令行传递的内存中运行MAVEN_OPTS
。-Xmx1024m
(或更多)mvn
。<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>pertest</forkMode>
<argLine>-Xms256m -Xmx512m</argLine>
<testFailureIgnore>false</testFailureIgnore>
<skip>false</skip>
<includes>
<include>**/*IntegrationTestSuite.java</include>
</includes>
</configuration>
</plugin>
更新(2017年5月31日): 感谢@johnstosh指出这一点-自从我发布这个答案以来,Surefire已经发生了一些变化。这里是他们的文档和一个更新的代码示例(对于这个问题,arg行仍然是重要的部分):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
<systemPropertyVariables>
<databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
</systemPropertyVariables>
<workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
</configuration>
</plugin>
命令应该是相同的,只是用SET代替EXPORT。
C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
- Gandalf StormCrowJAVA_OPTS
和MAVEN_OPTS
,而应该使用_JAVA_OPTIONS。这样做是有效的!成功了 - 要在 Eclipse 中进行更改,依次选择窗口 -> 首选项 -> Java -> 已安装的 JRE。选择已选中的 JRE/JDK,然后点击编辑。
默认虚拟机参数 = -Xms128m -Xmx1024m
在Windows上:
添加一个环境变量(在系统和用户变量中都要添加,我有一些奇怪的问题,它从各种地方获取变量,所以我在这两个位置都添加了它们)。
将其命名为MAVEN_OPTS。
值将是:-Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled
数字可以不同,使它们相对于您的内存大小。
我曾经遇到过这个问题,这个方法解决了它,没有其他方法!
您正在寻找有关 java
的 2 个选项:
将它们放入您对 java
可执行文件的命令行调用中,就像这样:
java -Xms512M -Xmx1024M my.package.MainClass
请记住,根据应用程序的不同,您可能希望起始堆大小和最大堆大小相同,这样可以避免在运行时调整堆大小(这可能会占用需要响应的应用程序的时间)。调整堆大小可能涉及移动许多对象并重新进行簿记。
对于日常项目,请将它们设置为您认为足够好的大小。使用性能分析工具以获取帮助。