静态方法内存分配

问题描述 投票:11回答:3

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

java static static-methods static-members
3个回答
3
投票

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

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


1
投票

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


-1
投票
  • 堆的Permanent Generation(PermGen)空间包含永久类元数据和描述符信息。

  • PermGen空间始终为类和与之相关的类保留类(静态成员,静态函数等)

  • 静态函数属于该类,因此可以在没有它们的情况下调用它们创建类的对象。

© www.soinside.com 2019 - 2024. All rights reserved.