这是一个后续问题静态数组如何存储在Java内存中? .
所以C/C++中的全局变量存储在内存的静态数据段中。但是 Java/C++ 中的静态类变量又如何呢?
它不能是静态数据段,因为您不知道在整个程序持续时间内将引用什么/多少个类(由于反射)。这绝对不是堆栈,因为那没有意义。将其存储在堆上也有点不确定。
在 Java 中,在较低级别上,类静态变量确实与所有其他类元数据一起存储在堆上。对于 Java 来说,它们看起来像全局变量,但对于 JVM 的低级堆管理例程来说,它们是动态数据(尽管为了提高 GC 效率,它们可能会被稍微特殊地处理,因为它们可能会长期存在)。毕竟,可以通过取消引用类加载器来卸载类。
至于是否和C一样malloc()
, 不见得。大多数 JVM 在较低级别上控制堆;他们从操作系统中获取一块内存并自行分配。因此,大多数 Java 数据(包括静态数据)并不存储在 malloc 堆中,而是存储在由 JVM 管理的单独堆中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)