【问题标题】:Specify JVM parameters whilst creating an executable jar (not when executing the jar)在创建可执行 jar 时指定 JVM 参数(不是在执行 jar 时)
【发布时间】:2015-08-06 09:56:13
【问题描述】:

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

那么 - 那么如何指定 -Xmx1024m 以便在构建 jar 时为使用的 jvm 提供一些额外的内存空间?

注意

罐子

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

现在我确实尝试设置

export JVM_OPTS=-Xmx1024m

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

【问题讨论】:

标签: java jar


【解决方案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 不再出现问题。

【讨论】:

  • 抱歉,我没抓住重点。现在很清楚了,我会删除我的 cmets。
【解决方案2】:

你不能。

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

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

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

由于这些原因,在构建时指定运行时选项几乎没有意义,这就是不可能的原因。

【讨论】:

  • 这个答案不是针对 OP:它是 not 指的是java -jar。 OP 首先是关于创建 jar 文件。你为什么指的是“目标”jvm?我只需要 jvm 创建 jar。
【解决方案3】:

【讨论】:

  • 那是为了运行一个jar文件。我在这里创建一个jar文件。
  • AFAIK 内存设置是在 JVM 启动时确定的,它们存储在您的 JAR 文件中。
  • 是的,我的意思是:您不能在 创建 jar 时指定执行参数(阅读 Serge Ballesta 的回答)。
  • @LittleSanti 其实可以——我有答案。
猜你喜欢
  • 2010-09-16
  • 2014-09-30
  • 2016-05-20
  • 1970-01-01
  • 2020-05-18
  • 2017-03-20
  • 2013-06-06
  • 2011-12-30
  • 2012-01-09
相关资源
最近更新 更多