静态方法内存分配

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

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

静态“对象”唯一不同的是你无法获得对它的引用。 (但您可以使用reflection来访问字段)

方法(即代码)不存储在对象中; 类的所有对象将共享方法的代码。 无论语言(Java,C ++或其他任何东西),对于任何方法,只有一个代码副本,静态或非静态。 通常,存在特定的内存区域 – 即C ++等本机语言中的CODE段,或Java中的特殊堆区域 – 其中加载了代码。