JVM如何处理静态变量?

class A{ static int a=5; int b=6; void method(){ //method body a++; } } 

JVM如何处理静态变量处理静态变量。 例如…

 A object1=new A(); A object2=new A(); 

上面的代码将在两个不同的内存位置创建两个A类对象。 还将创建variable b两个实例。 variable a会发生什么。 哪个对象将保存静态变量的引用? 以及更新静态变量时会发生什么?

“哪个对象将保存静态变量的引用”

对象不包含静态变量,因为它们未绑定到任何对象,它们绑定到类。 应用于类(而不是实例数据)的类和所有数据都存储在堆的“永久生成”部分中。

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

只有一个变量a副本,它在AA所有实例之间共享。

静态成员变量是类变量。 它们不存在于类的任何实例(对象)中 – 因此没有包含变量的A对象。

请参阅Oracle的Java教程: 了解类成员

静态变量与不在实例中的类相关,因此A的两个实例将共享静态变量。

另一个例子,如果你需要同步(使用synchronized)来访问静态变量,你必须记住锁是静态的,所以锁与所有实例共享。

直截了当的回答

“存储在类的上下文中的所有静态数据(全局内存)和存储在Object作用域内存中的所有对象数据,如实例变量(特定于每个对象 – 自己的副本)”

对静态变量的更改将反映到所有对象bcz它是一个全局内存,并且对实例变量的更改特定于对象级别

一个object1 = new A(); a = 5 b = 6

一个object2 = new A(); a = 5 b = 6

object1.method(); a = 6 b = 6

object2.method(); a = 7 b = 6