哪里是静态类变量存储在内存中
Where are static class variables stored in memory?
这是如何在Java内存中存储静态数组的后续问题?.
所以C/c++中的全局变量存储在内存的静态数据段中。但是Java/c++中的静态类变量呢?
它不能是静态数据段,因为你不知道在整个程序的持续时间内会引用什么/多少个类(因为反射)。它肯定不是堆栈,因为那没有意义。
在Java中,在较低的级别上,类静态变量确实与所有其他类元数据一起存储在堆上。对于Java来说,它们看起来像全局数据,但对于JVM的低级堆管理例程来说,它们是动态数据(尽管为了提高GC效率,可能会对它们进行稍微特殊的处理,因为它们可能存在很长时间)。毕竟,可以通过取消引用类加载器来卸载类。
至于是否与C malloc()
相同,不太可能。大多数jvm在底层控制它们的堆;它们从操作系统中抓取一块内存并自己分配。因此,大多数Java数据(包括静态数据)都不存储在malloc堆中,而是存储在JVM管理的单独堆中。
Java有一个"永久"堆,用于存放类元数据。因此,静态值的"根"位于永久堆中。这些值是参考值(类对象),值本身在常规堆中。
静态变量不会存储在Heap中。它们是数据段的一部分。局部变量将存储在- Stack中;实例变量将存储在- Heap中;类变量(静态)将存储在-数据段中。这些变量将在该类的所有对象之间共享。您的最终机器等效java代码将存储在- code/text段中。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 具有内存顺序的原子负载存储
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 可用存储空间会消耗更多剩余内存吗?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 将数据存储在内存中以供以后访问
- 英特尔将指令存储在重叠的内存区域
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- std::set 是否将对象连续存储在内存中?
- 原子加载和存储与内存顺序放宽
- 我应该以字符形式存储数字以节省内存吗?
- std::unordered_set 中的元素如何存储在C++内存中?
- 是否可以更早地销毁对象,使其存储内存被后续对象重用
- SSE加载/存储内存事务
- 在类- c++中存储内存内容