如果我们有这个代码
public static void count(){int i++}
public static void main(String args[])
{
System.out.println("Not calling the count method");
}
JVM什么时候知道有多少内存以及何时将 count() 方法压入堆栈?
我假设它是在堆栈上分配的。如果这是真的,那么 JVM 如何知道将对象方法压入堆栈,或者从堆中调用它们。?
假设我们有一个对象并且它有一个方法(非静态)。然后,在 main 中,我们创建一个对象,并且不调用它的任何方法。对象所具有的方法是否仍以某种方式分配到内存中?
java中的静态方法是在编译时压入堆栈的吗?对象的非静态方法怎么样?
最佳答案
您对 JVM 如何执行 Java 代码有误解,或者您以错误的方式使用术语。
方法不会被压入堆栈。方法不是“从堆中调用”(甚至不清楚您的意思)。编译时没有任何内容被压入堆栈;调用堆栈仅在运行时存在。
JVM 有一个 call stack 。这意味着每当您调用方法时,JVM 都会将返回地址和方法参数放入堆栈中。当方法返回时,返回地址被弹出,以便 JVM 知道在哪里继续执行代码。在这方面,实例方法和静态
方法之间没有区别。
方法的字节码只有一份副本。由于方法的字节码在运行时不会更改,因此为类的每个实例复制该方法的代码没有任何意义(无论该方法是否是静态
)。
关于java - 关于静态方法和调用堆栈的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527178/