我想知道在Java中存储静态变量的位置。
已经有如此之少的问题,比如: where is a static method and a static variable stored in java. In heap or in stack memory哪里存储在Java中的静态变量?
链接指出静态变量保存在堆上。
但以下是从一本书比尔Veners一间摘录(“深入Java虚拟机”):
方法区
里面一个Java虚拟机实例,约装载类型的信息存储在 内存的逻辑区域调用方法区域。当Java虚拟机加载一个类型时,它会使用一个类加载器来寻找合适的类文件到 。类加载器读入类文件 - 二进制数据的线性流 - 并将其传递给虚拟机。虚拟机从 二进制数据中提取关于类型的信息,并将信息存储在方法区域中。在 中声明的类(静态)变量的内存也从方法区域中获取。
它明确指出,当加载一个类时,静态变量存储在方法区域中。就我所知,方法区域与堆不同。所以这本书与提供的SO链接相矛盾。
有人可以澄清混淆?
[方法区在逻辑上是堆的一部分。](https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2。html#jvms-2.5.4) – EJP
感谢Siguza的格式化。顺便说一句,如何获得定制的ID? – Mandroid
@EJP这应该是一个答案。 – Siguza