在创建可执行jar时指定JVM参数(不是在执行jar时)

时间:2015-08-06 09:56:14

标签: java jar

构建 (不执行!)一个包含81K clacts的可执行jar。在构建过程中构建一个大的jar文件逐渐减慢,直到抛出java.lang.OutofMemoryException

那么 - 那么如何指定-Xmx1024m来为jvm提供一些额外的内存空间?

注意

  

命令不接受任何-D命令行参数。

现在我尝试设置

export JVM_OPTS=-Xmx1024m

并且可能有所帮助 - 因为jar命令确实有效。但我没有明确的方法知道它是否真的得到应用。

3 个答案:

答案 0 :(得分:1)

设置JVM_OPTS 解决此问题

export JVM_OPTS="-Xmx2048m"
jar -cvfm myjar.jar /tmp/manifest.txt classdir/

其他答案 - 以及结束投票 - 得出的结论是,该OP是通过java -jar myjar.jar 执行 jar文件的。

问题是 - 正如OP中所述 - 有数万个类要包含 - 并且它压倒了默认的JVM设置 - 导致OOME。我可以看到jar命令在它放弃之前放慢速度。添加JVM_OPTS后,构建 jar中没有更多问题。

答案 1 :(得分:0)

在启动JVM时,必须通过进程确定内存量:

java -Xmx1024m ... -jar my.jar ...

请参阅:

答案 2 :(得分:0)

你不能。

构建阶段与运行阶段不同。在构建时,您编译java源代码,并将它们与jar中的一些资源一起组装。这里没有涉及JVM选项。

然后在运行时,您可以通过java命令将选项传递给JVM。您不能在构建时包含JVM选项,因为:

  • 你不知道jar将在哪个JVM上执行,而不是在什么系统上执行
  • 您无法知道JVM上是否会接受特殊选项(特别是-X个)
  • 您无法了解可用资源

由于这些原因,如果在构建时指定运行时选项是没有意义的,那就是为什么不可能的原因。