我的Java Webstart应用程序在受控的可信环境中运行。这是一个封闭的内部网络,我可以控制应用程序的启动方式。
如何将JVM参数传递给应用程序,即使它们被认为是“不安全的”#39;供JVM使用webstart吗?
答案 0 :(得分:4)
有几种方法可以将JVM参数传递给webstart。
请注意,我已包含指向本文档的java 8版本的链接。所有这些想法都在其他Java版本中得到支持和记录,但有时它们的工作方式略有不同,或者稍有不同的限制。
JNLP通过JNLP文件支持许多JVM参数。有些可以通过直接设置完成,例如initial-heap-size
和max-heap-size
。对于其他设置,可以使用java-vm-args
。
JNLP File Syntax文档列出了一些受支持的java-vm-args,用于'此版本'但是不确定这是示例的版本1.4+
还是JRE 8.我知道实际上支持一些未列出的设置,例如-XX:MaxGCPauseMillis
并激活G1垃圾收集器。您可以制作JNLP,然后使用jinfo -flag MaxGCPauseMillis <pid>
来测试设置是否已正确传播。
这是首选方法,因为它不需要对JVM进行任何直接控制。缺点是只支持被认为是安全的特定参数。
使用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。
应该有另一种方法(除JAVA_TOOL_OPTIONS
方法之外)使用命令行更改参数。 javaws documentation列出-J
选项以将参数传递给JVM,例如通过运行JNLP,如下所示:
javaws -J-XX:SoftRefLRUPolicyMSPerMB=2000 <my jnlp>
但是我无法实际设置JVM参数。