在创建可执行 jar 时指定 JVM 参数(而不是在执行 jar 时)
Specify JVM parameters whilst creating an executable jar (not when executing the jar)
我正在构建(未执行!)一个包含 81K 类的可执行 jar。构建这么大的 jar 文件在构建过程中逐渐变慢,直到抛出 java.lang.OutofMemoryException
。
那么 - 那么如何指定 -Xmx1024m
来为构建 jar 时使用的 jvm 提供一些额外的内存空间?
注意
jar
命令不接受任何 -D
命令行参数。
现在我尝试设置
export JVM_OPTS=-Xmx1024m
它可能 有所帮助 - 因为 jar 命令确实有效。但我没有明确的方法知道它是否真的得到应用。
在启动 JVM 时,内存量必须由进程确定:
java -Xmx1024m ... -jar my.jar ...
参见:
你不能。
构建阶段不同于 运行 阶段。在构建时,您编译 java 源代码,并将它们与一些资源一起 assemble 在一个 jar 中。这里不涉及 JVM 选项。
然后在运行时,您可以通过java
命令将选项传递给JVM。您不能在构建时包含 JVM 选项,因为 :
- 你不知道 jar 将在哪个 JVM 上执行而不是在什么系统上
- 您不知道 JVM 是否接受特殊选项(特别是 -X 选项)
- 您无法知道可用资源
出于这些原因,在构建时指定 运行 时间选项毫无意义,这就是不可能的原因。
设置 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 不再有问题。
我正在构建(未执行!)一个包含 81K 类的可执行 jar。构建这么大的 jar 文件在构建过程中逐渐变慢,直到抛出 java.lang.OutofMemoryException
。
那么 - 那么如何指定 -Xmx1024m
来为构建 jar 时使用的 jvm 提供一些额外的内存空间?
注意
jar
命令不接受任何 -D
命令行参数。
现在我尝试设置
export JVM_OPTS=-Xmx1024m
它可能 有所帮助 - 因为 jar 命令确实有效。但我没有明确的方法知道它是否真的得到应用。
在启动 JVM 时,内存量必须由进程确定:
java -Xmx1024m ... -jar my.jar ...
参见:
你不能。
构建阶段不同于 运行 阶段。在构建时,您编译 java 源代码,并将它们与一些资源一起 assemble 在一个 jar 中。这里不涉及 JVM 选项。
然后在运行时,您可以通过java
命令将选项传递给JVM。您不能在构建时包含 JVM 选项,因为 :
- 你不知道 jar 将在哪个 JVM 上执行而不是在什么系统上
- 您不知道 JVM 是否接受特殊选项(特别是 -X 选项)
- 您无法知道可用资源
出于这些原因,在构建时指定 运行 时间选项毫无意义,这就是不可能的原因。
设置 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 不再有问题。