To pytanie może być głupie lub może być duplikatem. Nie rozumiem, w jaki sposób zmienne są pobierane ze stosu, gdy program odwołuje się do tej zmiennej. Obiekt jest przechowywany w stercie, a jego położenie jest przechowywane w zmiennej referencyjnej, a zmienna referencyjna zawierająca sam adres sterty jest przechowywana w stosie. Ale jak JVM odkrywa, że zmienna referencyjna jest przechowywana w jakiej lokalizacji w stosie.W jaki sposób JVM zna lokalizację zmiennej w stosie metody?
Przyjrzyjmy się przykładowi, aby wyjaśnić, o co mi chodzi.
Class Test {
public void test() {
Object a = new Bar();
Object b = new Foo();
System.out.println(a);
}
}
Powiedzmy, że metoda test() jest wykonywana. Tak więc stos zostanie przydzielony do testu().
Teraz, gdy wiersz "Obiekt a = nowy pasek(); 'zostanie wykonany, obiekt Bar zostanie utworzony w Heap, a rzeczywista zmienna "a", której wartość jest lokalizacją adresu obiektu Bar, będzie przechowywana w stosie testu().
Znów na linii "Obiekt b = nowy Foo(); "To samo się dzieje. Obiekt Foo zostanie utworzony w Heap, a rzeczywista zmienna 'b', której wartością jest lokalizacja adresu obiektu Foo, będzie przechowywana w stosie testu().
Teraz, gdy linia "System.out.println (a); 'jest wykonywany, w jaki sposób JVM wie, z której lokalizacji w stosie, należy pobrać wartość "a". Oznacza, co łączy zmienną "a" i jej położenie w stosie?
Dzięki za szczegółową odpowiedź. Po prostu wyjaśnienie: astore_x popchnie do pozycji "x" w tabeli zmiennych lokalnych, a aload_x popchnie pozycję przechowywaną na pozycji "x" w tabeli do stosu. To jest ogólny pomysł rt? – Dinkan
@Dinkan Dokładnie, i oczywiście "astore_x" również wyskakuje ze stosu. – biziclop
OK. Rozumiem. Dzięki. – Dinkan