有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用硬件相关VM参数(重新)启动Java应用程序的正确方法?

编辑我不想使用Java Web Start

我有一个Java应用程序,我希望根据启动它的系统的内存量使用不同的VM参数来运行它

例如,如果机器的内存为1GB或更少,我希望在内存为2GB时通过“-Xmx200m”和“-Xmx400m”,在内存为8GB时通过“-Xmx800m”(这些只是示例)

有没有一种便携的方法可以做到这一点

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

到目前为止,我已经编写了bashshell脚本,这些脚本根据配置使用正确的参数调用Java应用程序,但它只在Linux和osx上工作

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

应用程序打包程序包;)帮忙


共 (6) 个答案

  1. # 1 楼答案

    你对目前的方法有什么不满?它是完全可移植的(与各种脚本解决方案不同……为什么脚本比100%可移植字节码更“干净”?),如果硬件在安装后发生变化,它将完全适应(因此它比将硬件细节作为安装脚本的一部分捕获要好)

    如果你能解释实际问题,那么就更容易找到解决这些具体问题的方法

    实际上,这里有一个你可能更喜欢的替代方案:复制Photoshop、GIMP等的功能,并将“资源使用”或“性能”作为应用程序首选项的一部分。当/如果他们更改此设置时,您必须提示他们重新启动您的应用程序(使用修改后的启动过程重新启动您的应用程序,因为您无法更改正在运行的应用程序的内存限制…写入新标志取决于部署方法),但对于他们可能只更改一次的设置来说,这并不是灾难

    您还可以在第一次运行时检查他们的硬件,如果您的默认安装设置与他们的设置相差很远,则提示他们更改设置

  2. # 2 楼答案

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

    不幸的是,这仍然让您需要找出系统有多少内存,您的微型Java应用程序听上去最好

  3. # 3 楼答案

    http://ant.apache.org起:

    1. 是一个java程序
    2. 具有内置的分叉/启动机制
    3. 具有脚本基础知识
    4. 可嵌入到另一个程序中
    5. 具有处理环境/配置问题的命令行解析和其他基本功能

    我建议你

    1. 创建一个构建。xml(或以编程方式创建目标/任务)
    2. 让您的初始程序运行构建。xml脚本
  4. # 4 楼答案

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

  5. # 5 楼答案

    对于任何“配置任务”,我都建议使用izpack,这是一款功能强大且免费的packager。您还可以看看eclipse,他们在eclipse中实现了重新启动java应用程序

  6. # 6 楼答案

    你确定要这样做吗?一般来说,Java应用程序需要一定量的内存,而不是更多,也不是更少

    如果您有一台内存很少的机器,并且在-Xmx处指定了一个较小的数字,那么您就有可能内存不足

    如果您有一台具有大量内存的机器,并且指定了大量内存,那么应用程序将不会使用所有内存,而只使用正在使用的对象所需的内存量

    因此,一般来说,在-Xmx处指定大的数字不会丢失内存

    (例外情况是具有大量对象“吞吐量”且倾向于浪费内存的服务器应用程序。)