“this”引用是否存储在Java中的调用堆栈上?
我们已经知道,当我们在Java中调用方法时,参数和局部变量将存储在堆栈上。
例如,下面的代码:
public class Test
{
int x = 10;
int y = 20;
void test(int y)
{
int z = y;
this.x = y; // How JVM knows where is our current object?
}
public static void main(String [] args)
{
Test obj = new Test();
obj.test(3);
}
}
当我们调用时,将生成如下所示的调用堆栈:obj.test()
| |
+-------------+
| z |
| y | obj.test()
+-------------+
| obj | main()
+-------------+
但是我想知道存储中的引用在哪里?它是否也存储在堆栈上,如下所示:this
method
| |
+-------------+
| this |
| z |
| y | obj.test()
+-------------+
| obj | main()
+-------------+
或者它存储在内存中的其他区域?还是由运行时的 JVM 计算?
最后,我也很好奇堆栈中参数/变量的顺序是否有特定的顺序,就像C有调用约定一样,还是取决于VM的实现?obj.test()
更新:
我知道是关键字而不是普通的引用变量,但我对这个例子的主要关注点是JVM如何知道对象在堆中的位置?this
换句话说,JVM如何在运行时知道成员方法的当前对象是什么,以便他们可以访问这些实例变量?