在运行时设置JVM参数

Guy*_*Guy 24 java ikvm jvm

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

Har*_*d L 39

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

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

// ... later ...
String value = System.getProperty("propname");
Run Code Online (Sandbox Code Playgroud)

更新:

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

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345
Run Code Online (Sandbox Code Playgroud)

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


mP.*_*mP. 5

简而言之,您无法在运行时更改虚拟机参数。Runtime 类确实公开了一些选项,例如最大内存。主要参数(例如最大内存)只能由管理类型设置,以便在计算机上共存多个 JVM 时允许管理资源。允许一个 JVM 变得贪婪并请求比分配的更多的资源将会消除这一约束。

  • -1 可以在运行时更改VM参数!看一下“com.sun.management.HotSpotDiagnosticMXBean#setVMOption(String, String)” (9认同)