问题描述
堆对象内部的方法会发生什么?
所以我一直在阅读有关堆栈和堆内存管理的信息。
我会假设这些方法存储在堆栈中,因为“ 方法存储在堆栈中”。但是我找不到关于此的确认。例如构造函数会发生什么?
任何人都可以回答这个问题吗?
解决方法
将根据其在Java中的工作方式进行解释。
方法和变量(内部方法)存储在堆栈中。
局部变量(方法内的变量)存储在堆栈中。但不是方法本身。
通过方法,我们引用行为或需要执行的指令列表。这不会改变每个方法调用,甚至不会改变创建的每个对象实例。在班级的行为保持不变。
该行为存储在一个称为“方法”区域的区域中。您可以参考Java Spec了解更多详细信息。
按照规范,
方法区域是在虚拟机启动时创建的。尽管方法区域在逻辑上是堆的一部分,但是简单的实现可以选择不进行垃圾回收或压缩。此版本的Java虚拟机规范没有规定方法区域或用于管理已编译代码的策略的位置。
留给方法区域所在的JVM实现。
直到Java 7之类的HotSpot VM之类的实现都用于将方法区域存储为堆的一部分。但是从Java 8开始,它被移出堆,并且分配给堆的空间未被方法区域占用。
例如构造函数会怎样?
构造是具有特殊名称<init>
。1的方法。它们的存储方式与其他方法相同。
附带说明一下,有一个名为<clint>
的类初始化方法,该方法处理类中的静态块。2