我们有两个分类堆和堆栈。创建对象时,对象的内存存储在堆中。如果类具有静态方法,可以使用类名调用该怎么办。如果没有创建对象,那么它将如何分配内存?如果它在哪里分配内存?
答案 0 :(得分:2)
它取决于JVM,但静态字段通常存储在堆上的特殊对象中。 (您可以在堆转储中看到它)卸载ClassLoader时,它的类及其静态“对象”/字段也会被清除。
静态“对象”唯一不同的是你无法获得对它的引用。 (但您可以使用反射来访问字段)
答案 1 :(得分:1)
方法(即代码)不存储在对象中;类的所有对象将共享方法的代码。无论语言(Java,C ++或其他任何东西),任何方法的代码只有一个副本,静态或非静态。通常有一个特定的内存区域 - 即C ++等本机语言中的CODE段,或Java中的特殊堆区域 - 其中加载了代码。
答案 2 :(得分:-1)
堆的永久代(PermGen)空间包含永久类 元数据和描述符信息。
PermGen空间始终为类和与之相关的类保留 类(静态成员,静态函数等)
静态函数属于此类,因此可以在不使用静态函数的情况下调用它们 创建类的对象。