静态类变量在内存中存储在哪里?

这是如何将静态数组存储在Java内存中的后续问题? 。

所以C / C ++中的全局变量存储在内存的静态数据段中。 但是,Java / C ++中的静态类变量呢?

它不能是静态数据段,因为在整个程序期间(因为反射)你不知道会有多少类将被引用。 这绝对不是筹码,因为这没有意义。 将它存储在堆上也是如此。


在Java中,在低层次上,类静态变量确实存储在堆中,以及所有其他类的元数据。 对于Java而言,它们看起来像全局变量,但对于JVM的低级堆管理例程而言,它们是动态数据(尽管为了提高GC效率可能会稍微处理它们,因为它们可能会很长寿)。 毕竟,类可以通过不引用类加载器来卸载。

至于它是否与C malloc() ,不太可能。 大多数JVM在低级别上控制它们的堆; 他们从操作系统中获取大量内存并将其自行分配。 因此,大多数Java数据(包括静态数据)都不存储在malloc堆中,而是存储在由JVM管理的单独堆中。


Java有一个“永久”堆,它放置类元数据。 所以静态值的“根源”是永久性的堆。 这些值是参考值(类对象),这些值本身在常规堆中。


静态变量不会存储在堆中。它们是数据段的一部分。 局部变量将被存储在 - Stack; 实例变量将存储在 - 堆; 类变量(静态)将存储在 - 数据段中。 这些变量将在该类的所有对象之间共享。您的最终机器等效Java代码将存储在 - 代码/文本段中。

链接地址: http://www.djcxy.com/p/78703.html

上一篇: Where are static class variables stored in memory?

下一篇: How to increase the maximum memory allocated on the stack/heap