将JVM系统属性添加到正在运行的JVM吗?

时间:2018-10-06 17:42:36

标签: java jvm

我有一个正在运行的Java程序,我想在命令行中通过更改自定义系统属性来进行控制,该属性正在侦听应用程序内部的更改,因此不需要重新启动应用程序即可进行更改影响。

我知道可以使用jinfo更改一些默认的JVM属性,但是它似乎不适用于我在编译时使用-D标志设置的自定义属性。

例如,如果我使用以下命令行参数启动JAR:

java -Dfoo=1 -jar my_jar.jar

尝试调用以下内容失败:

jinfo -flag foo=2 'pid'

我是否缺少某些东西,或者这根本不可能吗?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 该实用程序不受支持,在以后的JDK版本中可能不可用。 Official Doc
  2.   
  3. 并非所有可用参数都可以更改。 Reference
  4.   

IMO,推荐的方法是进行一些事件侦听器或服务调用以更改正在运行的应用程序的标志。
我已经使用jinfo使用了一些系统属性,因此不确定在jar执行期间是否可以更改自定义标志。使用命令jinfo -flag +<customBooleanFlag> <PID>尝试一些自定义的布尔标志,以检查其是否有效。