【问题标题】:Can static variables be shared between processes in java [closed]java中的进程之间可以共享静态变量吗[关闭]
【发布时间】:2016-05-19 10:50:10
【问题描述】:

这个问题:java static variable and process

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

【问题讨论】:

标签: java variables static


【解决方案1】:

没有。这是不可能的。

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

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

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

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

类加载器没有帮助。一个java进程/地址空间中的类加载器将类加载到那个地址空间。其他进程看不到,也看不到对应的静态变量。

【讨论】:

    【解决方案2】:

    您可以通过使用存储变量的数据库来做到这一点,并且所有 VM 实例都应针对这些变量读取和写入该库。

    【讨论】:

    • 但是你在不同的虚拟机中只有静态变量的不同版本......并且没有办法让它们保持同步。 OP 要求一些表现为单个变量的东西。这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2011-06-23
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多