运行时不修改javax.net.debug值的原因是什么?

运行时不修改javax.net.debug值的原因是什么?,java,debugging,Java,Debugging,标记javax.net.debug在任何java应用程序的开头读取,并且不能在运行时修改,如本答案中所述- 但是,我不知道为什么它的设计方式是这样的,即我们不能在不关闭正在运行的java应用程序的情况下修改这个标志。例如,在生产中使用java服务器时,只需启用此标志就可以帮助识别某些SSL或任何其他此类问题,而无需关闭服务器应用程序本身 有一个强有力的理由可以解释为什么它是这样设计的。谁能给我点光吗 提前感谢。考虑到在99.99999%的情况下,调试标志始终是一个或另一个,因此始终检查调试标志是

标记
javax.net.debug
在任何java应用程序的开头读取,并且不能在运行时修改,如本答案中所述-

但是,我不知道为什么它的设计方式是这样的,即我们不能在不关闭正在运行的java应用程序的情况下修改这个标志。例如,在生产中使用java服务器时,只需启用此标志就可以帮助识别某些SSL或任何其他此类问题,而无需关闭服务器应用程序本身

有一个强有力的理由可以解释为什么它是这样设计的。谁能给我点光吗


提前感谢。

考虑到在99.99999%的情况下,调试标志始终是一个或另一个,因此始终检查调试标志是否打开是低效的。这是因为出于性能原因,它只读取一次。显而易见的原因是安全吗?或者,可能是因为对象构造可能基于此标志,而更改它不会导致重新创建这些对象。或者是可变全局状态的许多其他问题之一。@Kayaman,@EJP debug flag是
SSLSocketFactory.java
类中的一个变量,每次登录之前都会读取该变量。java不需要一直轮询这个值,只要在运行时调用
System.setProperty(“javax.net.debug”,“any value”)
,它就可以修改调试标志。如果这是读取此值的唯一位置,我看不出它对性能有任何影响。但似乎有什么东西藏在我的眼睛里!你注意到它在做一个特权动作了吗?这很昂贵,如果你想让SecurityManager负责的话,你不能用另一种方式。因此,在启动时阅读一次是处理它的有效方法。