静态方法内存分配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态方法内存分配相关的知识,希望对你有一定的参考价值。
我们有两个分类heap和stack。创建对象时,对象的内存存储在堆中。如果该类具有静态方法,可以使用类名调用该方法,该怎么办。如果未创建对象,那么它将如何分配内存;如果创建对象,它将在哪里分配内存?
答案
它取决于JVM,但是静态字段通常存储在堆上的特殊对象中。 (您可以在堆转储中看到它)卸载ClassLoader时,还将清理其类及其静态“对象” /字段。
关于静态“对象”的唯一不同之处在于您无法获得对其的引用。 (但是您可以使用反射来访问字段)
另一答案
方法(即代码)未存储在对象中;类的所有对象将共享方法的代码。无论使用哪种语言(Java,C ++或几乎任何其他语言),任何方法(无论是否静态)都只有一个代码副本。通常,有一个特定的内存区域-即本地语言(如C ++)的CODE段,或Java中的特殊堆区-加载代码的地方。
另一答案
堆的Permanent Generation(PermGen)空间包含永久类元数据和描述符信息。
PermGen空间始终为类和与之相关的类保留类(静态成员,静态函数等)
静态函数属于该类,因此可以在没有它们的情况下调用它们创建类的对象。
以上是关于静态方法内存分配的主要内容,如果未能解决你的问题,请参考以下文章
JVM存储位置分配——java中局部变量实例变量和静态变量在方法区栈内存堆内存中的分配