是否正确地(重新)启动具有硬件相关VM参数的Java应用程序?

时间:2010-03-03 10:02:29

标签: java parameters jvm

编辑我不想使用Java Web Start

我有一个Java应用程序,我想使用不同的VM参数运行,具体取决于它启动的系统的内存量。

例如,如果机器有1 GB或更少的内存,我想传递“-Xmx200m”和“-Xmx400m”(如果它有2 GB)和“-Xmx800m”(如果它有8 GB)(这些只是示例) )。

有可行的方法吗?

我尝试过第一个小型Java应用程序(因此是可移植的)确定可用的内存量,然后启动一个新的Java应用程序,但我认为这不是很干净。

截至目前,我已经编写了Bash shell脚本,根据配置调用具有正确参数的Java应用程序,但它仅适用于OS X上的Linux。

解决这个问题的正确方法是什么?

应用程序打包程序包;)帮助吗?

7 个答案:

答案 0 :(得分:2)

你确定要这么做吗?通常,Java应用程序需要一定量的内存,而不是更多,而不是更少。

如果您的计算机内存很少,并且在-Xmx处指定了一个较小的数字,则可能会出现内存不足的情况。

如果您的计算机有大量内存且指定了大量内存,则应用程序将不会使用所有内存,而只会使用正在使用的对象所需的数量。

因此,通常,您不会通过在-Xmx处指定大数字来丢失内存。

(例外情况是服务器应用程序具有大量对象'吞吐量'并且往往会浪费内存。)

答案 1 :(得分:2)

你对目前的做法有什么抱怨?它是完全可移植的(不同于各种脚本解决方案......为什么脚本比100%便携式字节码更“干净”?),如果硬件在安装后发生变化,它将完美适应(因此它比捕获硬件细节更好)您的安装脚本)。

如果您能解释实际问题,可能更容易找到解决这些特定问题的方法。

以下是您可能更喜欢的替代方案:实际上:复制Photoshop,GIMP等所做的操作,并将“资源使用”或“性能”作为应用偏好的一部分。如果/如果他们更改此设置,则必须提示他们重新启动应用程序(使用修改后的启动过程重新启动应用程序,因为您无法更改正在运行的应用程序的内存限制...您在哪里编写新标记是部署方法依赖的),但这不是一个设置的灾难,他们可能会改变一次。

您还可以在首次运行时检查他们的硬件,如果您的默认安装设置偏离其设置,则提示他们更改设置。

答案 2 :(得分:2)

http://ant.apache.org

  1. 是一个java程序
  2. 内置分叉/启动机制
  3. 有脚本基础知识
  4. 可嵌入其他程序
  5. 有命令行解析和其他处理环境/配置问题的基本内容。
  6. 我建议你

    1. 创建build.xml(或以编程方式创建目标/任务)
    2. 让你的初始程序是运行build.xml脚本的蚂蚁

答案 3 :(得分:0)

要定义各种启动配置,我将使用JNLP。可以在那里指定xmx。

不幸的是,这仍然需要你找出系统有多少内存,你的小Java应用程序听起来最好。

答案 4 :(得分:0)

在与现有解决方案相同的行中,我使用脚本来启动我的应用程序但是使用Python而不是Bash。 Python出现在大多数Linux发行版和OSX上。唯一的困难是Windows,但您可以建议Python作为类似于安装JVM的先决条件。

答案 5 :(得分:0)

对于任何“配置任务”,我建议使用izpack,真正强大且免费的打包​​器。您可能还会看一下eclipse,他们已经实现了重启java应用程序。

答案 6 :(得分:0)

在应用程序包中使用bash脚本而不是JavaApplicationStub可以更改参数。但是,这会破坏handleOpenFile()功能:事件信号永远不会到达handleOpenFile ApplicationEvent事件。见http://lists.apple.com/archives/java-dev/2010/Jun/msg00009.html