在运行时设置JVM参数

时间:2009-11-18 06:38:18

标签: java jvm ikvm

在JVM加载(运行)之后是否可以更改/修改/添加VM参数?如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:38)

对于您通过命令行上的-D标志设置的属性,您需要System.setProperty。例如:

System.setProperty("propname", "hello world");

// ... later ...
String value = System.getProperty("propname");

<强>更新

您无法动态启用调试,但可以在启动时启用调试,但稍后再附加调试器。通过以下内容,您可以侦听端口12345并立即启动程序(通过suspend=n)。然后,如果/需要,可以附加调试器,分离调试器,稍后再次附加,等等。

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345

当然,即使未附加调试器,这也会损害性能,因此它仅适用于开发/测试代码,而非生产。为此,您需要记录,例如log4j

答案 1 :(得分:4)

简短的回答是您无法在运行时更改VM参数。 Runtime类确实暴露了一些选项,如max memory。诸如max memory之类的主要参数应仅由管理类型设置,以允许在机器上存在多个JVM时管理资源。允许一个JVM变得贪婪并且要求比分配的更多和更多将会杀死这个约束。