在JVM加载(运行)之后是否可以更改/修改/添加VM参数?如果是这样,我该怎么做?
答案 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变得贪婪并且要求比分配的更多和更多将会杀死这个约束。