在运行时设置JVM参数

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

对于您通过命令行上的-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 。

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