Это & #39; это & ​​#39; ссылка хранится в стеке вызовов в 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 во время выполнения?

Наконец, мне также любопытно, имеет ли порядок параметров/переменных obj.test()в стеке определенный порядок, точно так же, как C имеет соглашение о вызовах, или это зависит от реализации VM?

Обновление:

Я знаю, что this— это ключевое слово, а не обычная ссылочная переменная, но меня больше всего беспокоит этот пример: как JVM узнает, где находится объект в куче?

Или, другими словами, как JVM может узнать, что является текущим объектом метода-члена во время выполнения, чтобы получить доступ к этой переменной экземпляра?

13
задан Brian Hsu 20 April 2012 в 06:09
поделиться