这个问题可能有点傻,或者可能是一个重复的问题。我对程序引用变量时如何从堆栈中检索变量感到困惑。
一个对象存储在堆中,其位置存储在引用变量中,并且包含堆地址的引用变量本身存储在堆栈中。但是JVM如何找出该引用变量存储在堆栈的哪个位置。
为了澄清我的疑惑,让我们考虑以下示例。
假设方法test()正在执行,那么将为test()分配堆栈。
现在当执行行“Object a = new Bar();”时,Bar对象将在堆中创建,并将实际变量'a'(其值是Bar对象的地址位置)存储在test()的堆栈中。
同样,在行“Object b = new Foo();”上发生相同的事情。Foo对象将在堆中创建,并将实际变量'b'(其值是Foo对象的地址位置)存储在test()的堆栈中。
现在当执行行“System.out.println(a);”时,JVM如何知道从堆栈中哪个位置检索变量'a'的值?这意味着什么将变量'a'与其在堆栈中的位置链接起来?
Class Test {
public void test() {
Object a = new Bar();
Object b = new Foo();
System.out.println(a);
}
}
假设方法test()正在执行,那么将为test()分配堆栈。
现在当执行行“Object a = new Bar();”时,Bar对象将在堆中创建,并将实际变量'a'(其值是Bar对象的地址位置)存储在test()的堆栈中。
同样,在行“Object b = new Foo();”上发生相同的事情。Foo对象将在堆中创建,并将实际变量'b'(其值是Foo对象的地址位置)存储在test()的堆栈中。
现在当执行行“System.out.println(a);”时,JVM如何知道从堆栈中哪个位置检索变量'a'的值?这意味着什么将变量'a'与其在堆栈中的位置链接起来?
astore_x
也会从堆栈中弹出该值。 - biziclop