Java 静态变量的实际内存位置是什么?
静态变量在程序执行的整个过程中分配,因此 也不方便。那么变量在哪里?是否应该在某个地方加载它?从: 静态变量的内存已分配 在节目开始时,在 常规内存,而不是堆栈 (专用于存储的内存) 程序)。这样做的好处是 它使您的变量或 程序完全不变,你呢 不能意外更改该值。 这样做的缺点是 直到 程序终止。我从来没有 听说过静态值的任何东西吗 有没有比它们更大的内存 定期声明,但他们的记忆 使用始终不变 静态变量是在程序执行的整个过程中分配的,所以堆栈和堆都不适合它 实际上,静态帧(即保存静态变量的帧)是从堆中分配的Java 静态变量的实际内存位置是什么?,java,memory,memory-management,garbage-collection,Java,Memory,Memory Management,Garbage Collection,静态变量在程序执行的整个过程中分配,因此 也不方便。那么变量在哪里?是否应该在某个地方加载它?从: 静态变量的内存已分配 在节目开始时,在 常规内存,而不是堆栈 (专用于存储的内存) 程序)。这样做的好处是 它使您的变量或 程序完全不变,你呢 不能意外更改该值。 这样做的缺点是 直到 程序终止。我从来没有 听说过静态值的任何东西吗 有没有比它们更大的内存 定期声明,但他们的记忆 使用始终不变 静态变量是在程序执行的整个过程中分配的,所以堆栈和堆都不适合它 实际上,静态帧(即保存静态变量的帧)是从
而且它们在程序执行期间不一定存在。例如,如果父类加载器、所有类和所有实例变得不可访问,则可以对动态加载的类的静态帧进行垃圾收集。在加载类时初始化静态字段,在卸载该类的类加载器时丢弃静态字段。它们可以被清理,甚至可以在另一个类装入器中复制 对于像那些使用OSGi的应用程序,静态变量不会在应用程序的整个生命周期中存在。它们可以多次重新加载
这一实现方式可能依赖于JVM,但Sun/Oracle JVM创建了一个“对象”来保存类的静态字段。此对象可通过不安全类访问,该类也可用于检查此“对象”字段。我们的内存中有3段:
JVM使用的五个内存区域中,当应用程序类加载器在准备和加载阶段加载类时,静态字段在类区域(PremGen的一部分)中分配内存。 如果字段是基本字段,则值存储在类区域中,如果它是对象类型(使用新运算符),则存储在堆中,但引用给类区域中指定的静态字段变量。 卸载该类时,该静态字段的内存也可由GC进行垃圾收集
如果字段也是final,即static final,则它将保存在类区域下的常量池中。静态变量由存储代码的同一内存段(即类区域)中的内存提供。它独立于内存的堆栈或堆段。在整个课程期间,它仍然可以访问 另见:@mnicky谢谢!!!它很有用。可能重复-1:“完全恒定”?你在考虑期末考试吗?直到最后才释放内存;这不是一个缺点,这就是
静态的全部要点@OliCharlesworth,他说的是静态final
变量。和被迫使用更长的内存相比,这是一个劣势,而不是不必这么做。这个答案已经被投票了这么多,但与Sourav矛盾,你能给出你的来源吗?也许SoaVAV是指C++?