在Windows上的Maven 2下设置Java堆空间


91

我在构建项目期间收到此消息

java.lang.OutOfMemoryError:Java堆空间

我如何增加堆空间,我有8Gb或RAM,这是行家不可能消耗那么多的东西,我发现这是http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux /如何在linux上做,但是我在Windows 7上。如何更改Windows下的Java堆空间?


我假设您使用的是64位版本的Windows?如果不是,您将不指定超过1.5G的堆大小,JVM将要求其他0.5G窗口允许您直接使用。有一个选项可以使Windows仅将1G用于内核模式代码,将3G用于用户模式代码,但是sun JVM不允许您使用它。
维多利亚

@vickirk,我使用的是Windows 64位版本
Gandalf StormCrow,2010年

1
您还在使用64位版本的JVM吗?在JDK下载页面的下拉列表中,它将列为Windows x64:java.sun.com/javase/downloads/widget/jdk6.jsp
Powerlord 2010年

Answers:


117

MAVEN_OPTS例如,要设置的环境变量MAVEN_OPTS=-Xmx1024mmaxmempom中的配置仅在将编译器插件设置为派生 javac到新的JVM中时适用。否则,插件将在与Maven相同的VM中运行,并因此在通过命令行传递的内存中运行MAVEN_OPTS

在Windows 7下设置MAVEN_OPTS:

  1. 右键单击我的电脑,然后选择属性(键盘快捷键按Windows+ Pause/Break
  2. 单击“ 系统属性”左侧导航中的“ 高级系统设置”链接以显示“ 高级系统属性”
  3. 转至高级选项卡,单击环境变量位于底部按钮高级系统属性设置窗口
  4. 创建一个新的用户变量,将变量名称设置为MAVEN_OPTS并将变量值设置为-Xmx1024m(或更多)

打开一个新的命令窗口并运行mvn


1
这对我的构建速度有影响吗?有什么技巧可以通过分配更多内存来增强我的Maven构建?
Mahendran

45

如果在surefire(或故障安全)JUnit测试运行期间堆空间不足,则更改MAVEN_OPTS可能无济于事。我一直在尝试MAVEN_OPTS中的其他配置,但没有运气,直到找到解决此问题的帖子

基本上,JUnits分叉到自己的环境中,而忽略MAVEN_OPTS中的设置。您需要在pom中配置surefire以为JUnits添加更多内存。

希望这可以节省别人一些时间!


编辑:从Keith Chapman的博客中复制解决方案,以防万一链接中断一天:

<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>

更新(5/31/2017):感谢@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>

确实节省了我一些时间!谢谢!不幸的是,我只能投票一次!:)
javanna

这是真正的行家风格,是其他人之间最有用的答案。谢谢!
Andremoniy 2014年

这是对该问题的实际答案
乔纳森·兰德鲁姆

1
请参阅关于surefire的文档。2.14之前的surefire版本使用参数forkMode来配置分支。尽管仍支持该参数以实现向后兼容,但仍强烈建议用户迁移其配置并改用forkCount和复用Forks。
约翰斯托什

21

它应该是相同的命令,除了SET而不是EXPORT

  • 设置MAVEN_OPTS = -Xmx512m将为其提供512Mb的堆
  • 设置MAVEN_OPTS = -Xmx2048m会给它2Gb的堆

我同意应该使用相同的命令,但这并不能说是正确的,这就是为什么C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Gandalf StormCrow 2010年

glowcoder有点错误。您无需导出变量,但需要为它们分配值。
JeremyP 2010年

如果要对每个构建使用相同的值,也可以将MAVEN_OPTS设置为Windows环境变量。
digitaljoel 2010年

@Gandalf您需要将集合放在其前面@Jeremy是的,这就是为什么它说使用集合而不是导出的原因
corsiKa 2010年

9

在Mac上:代替JAVA_OPTSMAVEN_OPTS,使用_JAVA_OPTIONS。这可行!


这也适用于Windows。在Eclipse的maven运行配置中将此添加为环境变量,从
m2e

3

尝试在没有运气的情况下使用MAVEN_OPTS变量后,我遇到了对该网站有用的网站。因此,我要做的就是将-Xms128m -Xmx1024m添加到默认的VM选项中,并且可以正常工作。

要在Eclipse中更改它们,请转到窗口->首选项-> Java->已安装的JRE。选择选中的JRE / JDK,然后单击“编辑”。


0

在Windows上:

添加一个环境变量(在系统变量和用户变量中,我都有一些奇怪的问题,它从不同的地方获取var,因此我将它们都添加到了这两个变量中)。

将其命名为MAVEN_OPTS。

值将是: -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

数字可以不同,使它们相对于您的内存大小。

我遇到了这个问题,这个问题就解决了,别无其他!


0

它有效-要在Eclipse中进行更改,请转到窗口->首选项-> Java->已安装的JRE。选择选中的JRE / JDK,然后单击“编辑”。

默认VM参数= -Xms128m -Xmx1024m


-6

您正在寻找2种选择java

  • -Xmx 最大堆大小
  • -Xms 开始堆大小

将它们放入java可执行文件的命令行调用中,如下所示:

java -Xms512M -Xmx1024M my.package.MainClass

请记住,取决于应用程序,您可能希望起始堆大小和最大堆大小相同,因为它避免了在运行时调整堆大小(在需要响应的应用程序中会占用时间)。调整堆大小可能需要移动许多对象并重做簿记。

对于日常项目,使它们成为您认为足够好的项目。寻求帮助的个人资料。


1
如ebelisle所言,此选项根本不起作用,因为使用Maven时,您必须至少指定一个带有“ -D”的Maven选项,但仍然不是我们正在谈论的Java命令
frandevel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.