【问题标题】:memory allocated when launching jar via command line, but not if double clicked通过命令行启动 jar 时分配的内存,但如果双击则不会
【发布时间】:2015-01-07 09:58:48
【问题描述】:

我有一个 .jar 文件,它代表一个包装器,用于启动另一个带有 JVM 参数的 .jar 文件,因为显然没有其他方法可以做到这一点。这个包装器基于系统架构构建命令行参数java -jar <arg1> <arg2> ... MyJarFile.jar:是否调用64位JVM(-d64)并通过-Xmx1280M设置堆大小(据我了解,最大在32位系统上) ) 或要求 4 GB 如果它是 64 位架构。通过java -version 检查Java 版本表明我有一个64 位JVM 正在运行并检查环境变量中的PATH 来确认它。现在,如果我通过命令行启动包装器,一切都很好。实际的 .jar 文件使用分配的 4GB 内存启动。如果我在 Windows 资源管理器中双击包装器,实际的 .jar 文件会以最小(例如 247 MB​​)内存启动。 注意,我还在命令参数中设置了-Xms512MB,如果从 Windows UI 启动包装器,这显然会被忽略。确实,在我遇到问题的机器上,安装了 32 位和 64 位版本的 Java。检查本地机器/jarFile 条目下的 Windows 注册表(regedit),我看到它链接到运行时环境的 32 位版本。如果我在那里更改它,它可以工作,但是一旦安装了 java 更新,注册表设置就会恢复。任何想法为什么会发生这种情况? (我还没有在 UNIX 系统上进行测试,因为该应用程序主要用于 Windows)。谢谢。

【问题讨论】:

  • 请问您为什么使用 .jar 文件来传递 jvm 参数?更正常的方法是提供 2 个脚本,一个用于 windows 的 .bat 脚本和一个用于 unix 的 .sh 脚本,并通过脚本执行此操作。
  • 我正在使用包装器,因为我在构建它时会自动导出包装器 .jar 和实际的 .jar 文件(版本控制)。因此,为了避免每次都修改手头的 .bat 或 .sh。它独立于操作系统/架构。另外,应用程序的用户在运行这类脚本时可能会受到限制

标签: java windows command-line jar jvm-arguments


【解决方案1】:

查看 2GB 的示例:

java -Xmx2g -jar <your-file>.jar

希望对你有帮助

【讨论】:

  • ...真的!? :/我不确定您是否真正理解了这个问题。不管怎样,从那以后已经有一段时间了,我想我已经把它交给了管理员,以确保机器上只安装了一个 Java 版本来运行应用程序。
猜你喜欢
  • 2014-12-15
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多