静态方法内存分配

我们有两个分类堆和堆栈。创建对象时,对象的内存存储在堆中。如果类有静态方法,可以使用类名调用怎么办?如果未创建对象,那么它将如何分配内存,如果创建,它将在哪里分配内存?


答案 1

它依赖于 JVM,但静态字段通常存储在堆上的特殊对象中。(您可以在堆转储中看到它)卸载类装入器时,其类及其静态“对象”/字段也会被清理。

关于静态“对象”的唯一不同之处在于,您无法获得对它的引用。(但您可以使用反射来访问字段)


答案 2

方法(即代码)不存储在对象中;类的所有对象将共享方法的代码。无论语言如何(Java,C++,或者几乎任何其他语言),任何方法(无论是否静态)都只有一个代码副本。通常有一个特定的内存区域 - 即,像C++这样的母语的CODE段,或者Java中的特殊堆区域 - 加载代码。


推荐