如何通过'不安全' Java Webstart应用程序的JVM参数

时间:2016-12-02 12:43:50

标签: java java-web-start jvm-arguments

我的Java Webstart应用程序在受控的可信环境中运行。这是一个封闭的内部网络,我可以控制应用程序的启动方式。

如何将JVM参数传递给应用程序,即使它们被认为是“不安全的”#39;供JVM使用webstart吗?

1 个答案:

答案 0 :(得分:4)

有几种方法可以将JVM参数传递给webstart。

  1. 通过JNLP文件。
  2. 通过JAVA_TOOL_OPTIONS环境变量。
  3. 通过本地计算机上的部署设置。
  4. 通过javaws命令(我无法使其工作)。
  5. 请注意,我已包含指向本文档的java 8版本的链接。所有这些想法都在其他Java版本中得到支持和记录,但有时它们的工作方式略有不同,或者稍有不同的限制。

    通过JNLP文件。

    JNLP通过JNLP文件支持许多JVM参数。有些可以通过直接设置完成,例如initial-heap-sizemax-heap-size。对于其他设置,可以使用java-vm-args

    JNLP File Syntax文档列出了一些受支持的java-vm-args,用于&#39;此版本&#39;但是不确定这是示例的版本1.4+还是JRE 8.我知道实际上支持一些未列出的设置,例如-XX:MaxGCPauseMillis并激活G1垃圾收集器。您可以制作JNLP,然后使用jinfo -flag MaxGCPauseMillis <pid>来测试设置是否已正确传播。

    这是首选方法,因为它不需要对JVM进行任何直接控制。缺点是只支持被认为是安全的特定参数。

    通过JAVA_TOOL_OPTIONS环境变量

    使用javaws命令启动Java Webstart时,可以使用JAVA_TOOL_OPTIONS在从该环境启动的所有JVM上设置所需的任何参数。

    因此,在Linux中,您可以设置不受支持的参数:

    export JAVA_TOOL_OPTIONS=-XX:SoftRefLRUPolicyMSPerMB=2000
    javaws <my jnlp>
    

    请注意,这将影响使用此系统变量运行的所有Java应用程序。因此,应该非常谨慎地为所有用户或特定用户设置此项。如上例所示,仅为单个应用程序设置此选项更加安全。

    此解决方案的优点是您可以传递任何所需的参数。缺点是它需要一种特定的启动应用程序的方式,或者需要非常广泛的设置。它还需要控制客户端系统。

    通过本地计算机上的部署设置

    您还可以通过更改JVM的部署设置来传递JVM参数。这可以通过Java Control Panel完成,它允许您设置默认运行时设置。

    如果要自动执行这些设置,可以使用deployment properties文件。不幸的是,此文件的JRE特定部分未记录。手动调整此文件非常容易:

    deployment.javaws.jre.0.args=-XX\:SoftRefLRUPolicyMSPerMB\=2000
    

    自动执行此文件时,您必须非常仔细地查看它包含所有检测到的JVM的这些设置,因此您必须确保更改正确的JVM。此外,它还将用于系统上的所有Webstart和applet。

    通过javaws命令(我无法使其工作)

    应该有另一种方法(除JAVA_TOOL_OPTIONS方法之外)使用命令行更改参数。 javaws documentation列出-J选项以将参数传递给JVM,例如通过运行JNLP,如下所示:

    javaws -J-XX:SoftRefLRUPolicyMSPerMB=2000 <my jnlp>
    

    但是我无法实际设置JVM参数。