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によって計算されますか?
obj.test()
最後に、スタック内のパラメーター/変数の順序が、Cの呼び出し規約のように特定の順序になっているのか、それともVMの実装に依存しているのかについても興味があります。
更新:
通常の参照変数ではなくキーワードであることはわかっthis
ていますが、この例に関する私の主な関心事は、オブジェクトがヒープ内のどこに配置されているかをJVMがどのように認識するかです。
つまり、JVMは、実行時にメンバーメソッドの現在のオブジェクトをどのように認識して、それらのインスタンス変数にアクセスできるようにするのでしょうか。