26

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

4

2 回答 2

41

-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

于 2009-11-18T06:57:32.990 回答
4

一个简短的回答是您不能在运行时更改 VM 参数。Runtime 类确实公开了一些选项,例如最大内存。诸如最大内存之类的主要参数只能由允许在一台机器上同时存在多个 JVM 时管理资源的管理员类型设置。允许一个 JVM 变得贪婪并要求比分配的更多的东西会消除这种约束。

于 2009-11-18T06:57:41.357 回答