java静态变量和进程

java静态变量和进程,java,Java,如果我声明一个静态变量并将这个类编译成一个可执行的jar。如果我使用如下批处理文件启动此类: java MyClass java MyClass java MyClass 这三个进程是否共享同一个变量 否。静态变量特定于JVM实例。事实上,更重要的是,它特定于加载类的类加载器。因此,如果您创建了三个独立的类加载器,每个类加载器负责加载MyClass(不仅仅是委托给某个公共父类),那么它们在MyClass中都有一个独立的静态变量,静态资源是每个类加载器的,因此,您的3个进程显然有三个不同的类加载

如果我声明一个静态变量并将这个类编译成一个可执行的jar。如果我使用如下批处理文件启动此类:

java MyClass
java MyClass
java MyClass

这三个进程是否共享同一个变量

否。静态变量特定于JVM实例。事实上,更重要的是,它特定于加载类的类加载器。因此,如果您创建了三个独立的类加载器,每个类加载器负责加载
MyClass
(不仅仅是委托给某个公共父类),那么它们在
MyClass
中都有一个独立的静态变量,静态资源是每个类加载器的,因此,您的3个进程显然有三个不同的类加载器,因此不会共享变量。

您的意思是哪个进程有自己的内存空间?@optimus:当然每个进程都有自己的内存空间,但它比每个进程级别的内存更细粒度。每个进程都有自己的内存空间。这适用于任何类型的程序,并不特定于Java。线程不同于进程的一个特性是,它们默认共享内存空间。顺便说一句:进程可以有共享内存,但是Java对此的支持很少,很少使用。