首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的静态变量存储在哪里?

java中的静态变量存储在哪里?
EN

Stack Overflow用户
提问于 2015-06-27 18:16:52
回答 2查看 9.2K关注 0票数 3

我想知道静态变量在哪里存储在Java中。

关于这样的问题已经很少了,比如:where is a static method and a static variable stored in java. In heap or in stack memory

链接声明静态变量存储在堆中。

但以下是Bill Veners (“Java虚拟机内部”)一本书的摘录:

方法区 在Java虚拟机实例中,有关加载类型的信息存储在称为方法区域的逻辑内存区域中。当Java虚拟机加载一个类型时,它使用类加载器来定位适当的类文件。类加载器读取类文件--二进制数据的线性流--并将其传递给虚拟机。虚拟机从二进制数据中提取有关类型的信息,并将信息存储在方法区域中。类中声明的类(静态)变量的内存也来自方法区域。

它清楚地指出,当加载类时,静态变量存储在方法区域中。据我所知,方法区域与堆不同。因此,这本书与提供的So链接是矛盾的。

有人能澄清一下这种混淆吗?

EN

回答 2

Stack Overflow用户

发布于 2015-06-27 18:32:48

在JVM内存模型中,静态变量的引用和值都存储在本身位于堆中的方法区域中。

方法区域是在虚拟机启动时创建的.尽管方法区域在逻辑上是堆的一部分,但是简单的实现可以选择不进行垃圾收集或压缩。

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.4

票数 1
EN

Stack Overflow用户

发布于 2015-06-27 18:27:37

来自JVM Documentaion:

方法面积 Java虚拟机有一个在所有Java虚拟机线程之间共享的方法区域。该方法区域类似于常规语言编译代码的存储区域,或类似于操作系统进程中的“文本”段。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和构造函数的代码,包括类和实例初始化和接口初始化中使用的特殊方法(§2.9)。 方法区域是在虚拟机启动时创建的.虽然方法区域在逻辑上是堆的一部分,但是简单的实现可以选择不垃圾收集或压缩它。这个版本的Java规范并不要求方法区域的位置或用于管理编译代码的策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31091953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档