![](/img/trans.png)
[英]How can JVM arguments be passed to apps started through java webstart in MacOS?
[英]How to pass 'unsafe' arguments to the JVM of a Java Webstart application
我的Java Webstart应用程序在受控的受信任环境中运行。 这是一个封闭的内部网络,在这里我可以控制如何启动应用程序。
即使JVM参数被Webstart认为是“不安全的”,我如何将JVM参数传递给应用程序?
有几种方法可以将JVM参数传递给webstart。
请注意,我已包含指向本文档的Java 8版本的链接。 所有其他想法都在其他Java版本中得到支持和记录,但是有时它们的工作方式略有不同,或者限制有所更改。
JNLP通过JNLP文件支持许多JVM参数。 有些可以通过直接设置来完成,例如initial-heap-size
和max-heap-size
。 对于其他设置,可以使用java-vm-args
。
JNLP文件语法文档列出了“此版本”的一些受支持的java-vm-args,但是不确定是该示例的1.4+
版本1.4+
。我知道实际上支持某些未列出的设置,例如-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控制面板来完成,该面板允许您设置默认的运行时设置。
如果要自动执行这些设置,则可以使用部署属性文件。 不幸的是,该文件的JRE特定部分未记录。 手动调整此文件非常容易:
deployment.javaws.jre.0.args=-XX\:SoftRefLRUPolicyMSPerMB\=2000
自动执行此文件时,必须非常仔细地观察它包含所有检测到的JVM的这些设置,因此必须确保更改正确的设置。 而且,它将用于系统上的所有Webstart和applet。
应该有另一种方式(除了JAVA_TOOL_OPTIONS
方法之外)使用命令行来更改参数。 javaws文档列出了-J
选项,以将参数传递给JVM,例如,通过如下运行JNLP:
javaws -J-XX:SoftRefLRUPolicyMSPerMB=2000 <my jnlp>
但是,我无法获得此值来实际设置JVM参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.