可以在java中的进程之间共享静态变量

时间:2016-02-09 12:36:51

标签: java variables static

这个问题:java static variable and process

有没有办法在多个进程之间共享静态变量?例如,通过编写从磁盘加载相同类的自定义类加载器。

2 个答案:

答案 0 :(得分:4)

没有。这是不可能的。

每个进程都在一个单独的地址空间中。一个进程在另一个进程地址空间中看不到任何内容。这适用于所有进程,而不仅仅是Java进程。

一个进程在另一个进程地址空间中查看内容的唯一方法是2个进程是否具有公共共享内存段。在C / C ++中,可以这样做......如果你小心处理进程间同步。

在Java中,共享内存方法不实用:

  • 您不仅需要共享变量,还需要共享变量引用的对象的闭包
  • 这意味着共享部分堆。它不会起作用。 Java堆不是为此而设计的。
  • 然后是同步问题和Java内存模型。
  • 如果您完全使用堆外存储完成此操作,那么唯一可能的一点是。但是,这些不再是可以从Java代码中使用的static变量。

班级代表没有帮助。一个java进程/地址空间中的类加载器将类加载到 地址空间中。其他流程无法看到它们,也无法看到相应的静态变量。

答案 1 :(得分:0)

您可以使用存储变量的数据库来执行此操作,并且所有VM实例都应该读取和写入这些变量的基础。