我想了解Java中静态变量存储在哪里。
SO上已经有一些相关问题,比如:Java中静态方法和静态变量是存储在堆内还是栈内
SO上已经有一些相关问题,比如:Java中静态方法和静态变量是存储在堆内还是栈内
该链接说明静态变量存储在堆内。
但以下是Bill Veners(《Java虚拟机内部》)书中的节选:
方法区
在Java虚拟机实例中,有关已加载类型的信息存储在称为方法区的逻辑存储区域中。当Java虚拟机加载类型时,它使用类加载器来定位适当的类文件。 类加载器读入类文件--一个二进制数据流--并将其传递给虚拟机。虚拟机从二进制数据中提取有关类型的信息,并将信息存储在方法区中。在类中声明的类(静态)变量的内存也来自于方法区。
它明确说明,当加载类时,静态变量存储在方法区中。据我所知,方法区与堆不同。因此,该书与提供的SO链接存在矛盾。
请问有人能澄清这个混淆吗?