“Java中真正的全局状态”;“更全球化”;而不是“静态”?

“Java中真正的全局状态”;“更全球化”;而不是“静态”?,java,global-variables,classloader,Java,Global Variables,Classloader,我正在寻找一种在Java中维护真正全局变量的方法,一种对整个JVM实例有效的方法 如果我只是在某个地方使用了静态字段,如果包含该字段的类被不同的类加载器多次加载 我可以想出一些令人讨厌的方法来解决这个问题,比如只使用JDK标准类(通常应该总是由同一个类加载器加载),或者要求自定义MBean保持全局状态,但这些对我来说似乎像是黑客 免责声明:我知道全局状态是不好的,是的,我会尽可能避免它。承诺。我能想到的唯一可靠的方法是使用JNI,它不依赖于操纵容器的基本类加载器。为使用共享内存段或其他类似机制来

我正在寻找一种在Java中维护真正全局变量的方法,一种对整个JVM实例有效的方法

如果我只是在某个地方使用了
静态
字段,如果包含该字段的类被不同的类加载器多次加载

我可以想出一些令人讨厌的方法来解决这个问题,比如只使用JDK标准类(通常应该总是由同一个类加载器加载),或者要求自定义MBean保持全局状态,但这些对我来说似乎像是黑客


免责声明:我知道全局状态是不好的,是的,我会尽可能避免它。承诺。

我能想到的唯一可靠的方法是使用JNI,它不依赖于操纵容器的基本类加载器。为使用共享内存段或其他类似机制来支持全局状态的本机代码编写一个适配器。

我能想到的唯一可靠的方法是使用JNI,而不依赖于操纵容器的基本类加载器。将适配器写入使用共享内存段或其他类似机制来支持全局状态的本机代码。

系统属性可在整个VM中使用,但不能跨进程使用。一个虚拟机,一组属性


另请参见

系统属性可在一个VM中使用,但不能跨进程使用。一个虚拟机,一组属性


另请参见

如果您的问题与多个类加载器有关,则需要由系统类加载器或其他共享类加载器加载全局对象

设置方式取决于您如何运行应用程序,例如在Tomcat中,
CATALINA_BASE/lib
文件夹中的任何jar文件都会添加到共享类加载器中


一旦您的类被正确的类加载器加载,
静态
字段将按您希望的方式工作。

如果您的问题与多个类加载器有关,那么您需要由系统类加载器或其他共享类加载器加载全局对象

设置方式取决于您如何运行应用程序,例如在Tomcat中,
CATALINA_BASE/lib
文件夹中的任何jar文件都会添加到共享类加载器中


一旦您的类被正确的类加载器加载,
静态
字段将按照您希望的方式工作。

如果没有其他内容,那么出于我自己强烈的好奇心,请解释一下用例。使用
枚举
。但是请注意,您想要的实际上是“非OO”。@BoristheSpider枚举解决方案与静态字段解决方案存在完全相同的问题。如果您的问题与多个类加载器有关,则需要由系统类加载器或其他共享类加载器加载全局对象。设置方式取决于您如何运行应用程序,例如在Tomcat中,
CATALINA_BASE/lib
文件夹中的任何jar文件都会添加到共享类加载器中。一旦您的类被正确的类加载器加载,
静态
字段将执行您想要的操作。相关(和)如果没有其他内容,那么出于我自己强烈的好奇心,请解释用例。使用
枚举
。但是请注意,您想要的实际上是“非OO”。@BoristheSpider枚举解决方案与静态字段解决方案存在完全相同的问题。如果您的问题与多个类加载器有关,则需要由系统类加载器或其他共享类加载器加载全局对象。设置方式取决于您如何运行应用程序,例如在Tomcat中,
CATALINA_BASE/lib
文件夹中的任何jar文件都会添加到共享类加载器中。一旦正确的类加载器加载了类,
静态
字段将执行您想要的操作。相关(和)