ANT 任务 maxmemory 和通过 jvmarg 设置堆大小之间的区别?
Difference between ANT task maxmemory and setting heap size via jvmarg?
我在测试期间遇到堆异常:
[junit] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我已经阅读了有关此问题的 multiple 解决方案,但我不清楚哪种才是真正正确的方法。在 ANT 任务中,有一个选项,例如:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
其他人建议通过 ANT_OPTS 或通过任务传递参数,例如:
<jvmarg value="-Xmx1024M">
设置这两个值是否多余?如果不是,推荐的方法是什么?
这两种方法都达到了相同的最终结果,即;您的测试 运行 在分叉的 JVM 中,并且 JVM 是 运行,最大堆大小为 1024mb。
我认为在这些方法之间进行选择时要牢记的注意事项是:
- 您的构建脚本的 reader/maintainer 是否熟悉 JVM 最大堆(即
-Xmx
)的 'raw' 指令?
- 您的
<junit>
任务需要多个自定义 JVM 参数吗?
如果这两个问题的答案都是 "yes" 那么您 (a) 需要 JVM args 超出通过快捷方式支持的参数(例如 maxmemory
)和 (b) 您可以希望任何人 reading/maintaining 你的构建脚本都会很舒服地看到构建脚本中表达的 'raw' JVM args。这表明 <jvmarg>
可用于所有 JVM 参数。
如果这些问题的答案是 "no" 那么您根本不需要使用 <jvmarg>
,您可以坚持使用它的友好快捷方式:maxmemory
.
换句话说,以下两个声明在功能上是相同的,第一个可能更简单:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
...
</junit>
<junit fork="true" haltonfailure="no">
<jvmarg value="-Xmx1024m">
...
</junit>
相比之下,接下来的两个声明在功能上也是相同的,但第二个声明可能更一致,因为 all JVM args 的表达方式相同:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
<jvmarg value="-Denv=dev">
...
</junit>
<junit fork="true" haltonfailure="no">
<jvmarg value="-Denv=dev">
<jvmarg value="-Xmx1024m">
...
</junit>
但是,要点是所有这些方法在功能上是相同的,因此这实际上是一个偏好问题,也许与您自己项目的约定保持一致。
我在测试期间遇到堆异常:
[junit] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我已经阅读了有关此问题的 multiple 解决方案,但我不清楚哪种才是真正正确的方法。在 ANT 任务中,有一个选项,例如:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
其他人建议通过 ANT_OPTS 或通过任务传递参数,例如:
<jvmarg value="-Xmx1024M">
设置这两个值是否多余?如果不是,推荐的方法是什么?
这两种方法都达到了相同的最终结果,即;您的测试 运行 在分叉的 JVM 中,并且 JVM 是 运行,最大堆大小为 1024mb。
我认为在这些方法之间进行选择时要牢记的注意事项是:
- 您的构建脚本的 reader/maintainer 是否熟悉 JVM 最大堆(即
-Xmx
)的 'raw' 指令? - 您的
<junit>
任务需要多个自定义 JVM 参数吗?
如果这两个问题的答案都是 "yes" 那么您 (a) 需要 JVM args 超出通过快捷方式支持的参数(例如 maxmemory
)和 (b) 您可以希望任何人 reading/maintaining 你的构建脚本都会很舒服地看到构建脚本中表达的 'raw' JVM args。这表明 <jvmarg>
可用于所有 JVM 参数。
如果这些问题的答案是 "no" 那么您根本不需要使用 <jvmarg>
,您可以坚持使用它的友好快捷方式:maxmemory
.
换句话说,以下两个声明在功能上是相同的,第一个可能更简单:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
...
</junit>
<junit fork="true" haltonfailure="no">
<jvmarg value="-Xmx1024m">
...
</junit>
相比之下,接下来的两个声明在功能上也是相同的,但第二个声明可能更一致,因为 all JVM args 的表达方式相同:
<junit fork="true" haltonfailure="no" maxmemory="1024m">
<jvmarg value="-Denv=dev">
...
</junit>
<junit fork="true" haltonfailure="no">
<jvmarg value="-Denv=dev">
<jvmarg value="-Xmx1024m">
...
</junit>
但是,要点是所有这些方法在功能上是相同的,因此这实际上是一个偏好问题,也许与您自己项目的约定保持一致。