【问题标题】:java static variable and processjava静态变量和进程
【发布时间】:2012-04-29 12:46:16
【问题描述】:

如果我声明一个变量 static 并将这个类编译成一个可执行的 jar。如果我使用这样的批处理文件开始这个类:

java MyClass
java MyClass
java MyClass

所有 3 个进程会共享同一个变量吗?

【问题讨论】:

  • 每个进程都有自己的内存空间。这适用于任何类型的程序,并不特定于 Java。线程与进程不同的特点之一是它们默认共享内存空间。顺便说一句:进程可以有共享内存,但是 Java 对此的支持很少而且很少使用。

标签: java


【解决方案1】:

没有。静态变量特定于 JVM 实例。不仅如此,事实上 - 它特定于加载类的 类加载器。因此,如果您创建了三个独立的类加载器,每个加载器负责加载 MyClass(不只是委托给某个共同的父级),它们每个在 MyClass 中都有一个单独的、独立的静态变量。

【讨论】:

  • 你的意思是哪个进程有自己的内存空间?
  • @optimus:当然每个进程都有自己的内存空间,但它比每个进程级别更细。
【解决方案2】:

静态资源是每个类加载器,因此,您的 3 个进程显然具有三个不同的类加载器,因此不会共享变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多