2

目前我一直将我的应用程序部署为 .jar 文件,因为每个操作系统的用户都可以双击它。但是,我现在需要增加最大堆大小,唯一的方法是将命令行参数 (-Xmx1g) 传递给 JVM。我希望可以将它包含在 jar 清单中,但事实并非如此。

所以现在我不得不在具有参数的 .jar 中包含一个 .bat 或 .csh 。似乎有更好的方法可以做到这一点?我不认为 Webstart 是一个好的选择,因为 .jar 旨在在用户目录中运行,它会在其中写出文件。该应用程序是一个桌面 GUI 应用程序。

4

2 回答 2

2

Webstart 似乎是实现这一目标的好方法,如果您拥有正确的权限,则没有什么能阻止您读取/写入用户的文件系统。

它还提供了几个有趣的“功能”,包括:

  • 透明地向用户推送升级的可能性
  • 检查用户是否使用了正确版本的 JRE

在您的情况下,您只需要使用以下语法:

<j2se version="1.7+" java-vm-args="-Xmx1g" href="http://java.sun.com/products/autodl/j2se"/>
于 2012-04-17T20:42:50.297 回答
2

不幸的是,无法在 jar 内的清单文件中指定 vmargs,因此您需要一种解决方法,例如:

  • 创建一个脚本,使用指定的 vm args 启动 jar 文件
  • 将您的 jar 包装在一个可执行文件中,该可执行文件将用作启动器
  • 将您的 Java 代码编译为本机二进制文件

例如,第一个解决方案可以使用批处理或 shell 脚本轻松实现,而对于第二个解决方案,有几种可能有用的替代方案,例如前面提到的原生Java Web Start和作为跨平台 Java 可执行文件的launch4j包装。第三种解决方案可以在某些情况下实现,如果您的代码与GNU 类路径库兼容,在这种情况下,您可以使用GCJ编译为本机二进制文件。

于 2012-04-17T20:54:22.000 回答