在运行时设置 JVM 参数

2022-09-01 15:35:56

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


答案 1

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

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


答案 2

简短的回答是,您无法在运行时更改 VM 参数。运行时类确实公开了一些选项,如最大内存。主要参数(如最大内存)只能由管理员类型设置,以便在一台计算机上共存多个 JVM 时管理资源。允许一个JVM变得贪婪并要求比分配的多得多的东西会扼杀这个约束。


推荐