【问题标题】:Setting Java heap space under Maven 2 on Windows在 Windows 上的 Maven 2 下设置 Java 堆空间
【发布时间】:2011-02-18 16:14:18
【问题描述】:

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

java.lang.OutOfMemoryError:Java 堆 空间

如何增加堆空间,我有 8Gb 或 RAM,maven 不可能消耗那么多,我发现这个 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 作为堆大小,其他 0.5G 窗口允许您直接使用将是 JVM 要求的。有一个选项可以让 windows 只使用 1G 的内核模式代码和 3G 的用户模式代码,但是 sun JVM 不允许你使用它。
  • @vickirk 我使用的是 64 位版本的 windows
  • 您是否也在使用 64 位版本的 JVM?它将在 JDK 下载页面的下拉列表中列为 Windows x64:java.sun.com/javase/downloads/widget/jdk6.jsp

标签: maven-2


【解决方案1】:

如果您在运行可靠(或故障安全)JUnit 测试期间堆空间不足,则更改 MAVEN_OPTS 可能对您没有帮助。我一直在 MAVEN_OPTS 中尝试不同的配置,但没有成功,直到找到解决问题的 this post

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

希望这可以为其他人节省一些时间!


编辑:从Keith Chapman's blog 复制解决方案以防万一有一天链接断开:

<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 已经发展了一些。这是他们的documentation 的链接和更新的代码示例(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>

【讨论】:

  • 它确实节省了我一些时间!谢谢!不幸的是,我只能投票一次! :)
  • 这是其他人之间最有帮助的答案,采用真正的 Maven 风格。谢谢!
  • 这是问题的实际答案
  • 查看 surefire 上的文档。 2.14 之前的 surefire 版本使用参数 forkMode 来配置分叉。尽管仍支持该参数以实现向后兼容性,但强烈建议用户迁移其配置并改用 forkCount 和 reuseForks。
【解决方案2】:

在 Mac 上: 而不是JAVA_OPTSMAVEN_OPTS,而是使用_JAVA_OPTIONS。这行得通!

【讨论】:

  • 这也适用于 Windows。将此作为环境变量添加到 Eclipse 中的 maven 运行配置中,从 m2e 运行的测试不再给出 PermGen 错误
【解决方案3】:

成功了—— 要在 Eclipse 中进行更改,请转到 Window -> Preferences -> Java -> Installed JREs。选中勾选的JRE/JDK,点击编辑。

默认 VM 参数 = -Xms128m -Xmx1024m

【讨论】:

    【解决方案4】:

    在窗户上:

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

    将其命名为 MAVEN_OPTS。

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

    数字可以不同,根据你的内存大小设置。

    我遇到了这个问题,这解决了它,没有别的!

    【讨论】:

      【解决方案5】:

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

      在 Windows 7 下设置 MAVEN_OPTS:

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

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

      【讨论】:

      • 这对我的构建速度有影响吗?是否有任何提示可以通过为其分配更多内存来提升我的 Maven 构建?
      【解决方案6】:

      在尝试使用 MAVEN_OPTS 变量但没有成功后,我遇到了这个对我有用的site。所以我所要做的就是将 -Xms128m -Xmx1024m 添加到默认的 VM 选项中,它就可以工作了。

      要在 Eclipse 中更改这些,请转到 Window -> Preferences -> Java -> Installed JREs。选中勾选的JRE/JDK,点击编辑。

      【讨论】:

        【解决方案7】:

        您正在寻找java 的两个选项:

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

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

        java -Xms512M -Xmx1024M my.package.MainClass
        

        请记住,您可能希望起始堆大小和最大堆大小相同,具体取决于应用程序,因为这样可以避免在运行时调整堆大小(这可能会占用需要响应的应用程序的时间)。调整堆大小可能需要移动大量对象并重新记账。

        对于日常项目,将它们制作成您认为足够好的任何东西。个人资料寻求帮助。

        【讨论】:

        • 正如 ebelisle 所说,这个选项根本不起作用,因为您使用 Maven,必须至少指定这是一个带有“-D”的 Maven 选项,但仍然不是我们的 java 命令再谈
        【解决方案8】:

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

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

        【讨论】:

        • 我同意它应该是同一个命令,但这并不是真正的陈述,这就是为什么C:\my_project&gt;MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
        • glowcoder 有点错误。您不需要导出变量,但要为它们分配一个值,您需要设置。
        • 如果您想为每个构建使用相同的值,您还可以将 MAVEN_OPTS 设置为 Windows 环境变量。
        • @Gandalf 你需要把集合放在它前面@Jeremy 是的,这就是为什么它说使用集合而不是导出
        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2023-03-12
        相关资源
        最近更新 更多