Variablen in den Stack und die im Stack lebenden Variablen verschieben?

So weiß ich, dass es 2 Speicherbereiche gibt:Stape undHaufe.

Ich weiß auch, dass beim Erstellen einer lokalen Variablen diese im Stack und nicht im Heap gespeichert wird. Der Stapel wird größer, wenn wir Daten hineinschieben, wie in:

Jetzt werde ich versuchen, die Verwirrung, die ich habe, an dich weiterzugeben:

Zum Beispiel dieser einfache Java-Code:

public class TestClass {
    public static void main(String[] args)  {
        Object foo = null;
        Object bar = null;
    }
}

wird in diesen Bytecode übersetzt:

public static void main(java.lang.String[]);
  Code:
   Stack=1, Locals=3, Args_size=1
   0:   aconst_null
   1:   astore_1
   2:   aconst_null
   3:   astore_2
   4:   return

LineNumberTable: 
line 5: 0
line 6: 2
line 7: 4

LocalVariableTable: 
Start  Length  Slot  Name   Signature
0      5      0    args       [Ljava/lang/String;
2      3      1    foo       Ljava/lang/Object;
4      1      2    bar       Ljava/lang/Object;

where per definitionem acons_null ist:

push a null reference onto the stack

und astore_1 ist:

store a reference into local variable 1

Die Verwirrung, die ich habe, ist, wir haben das foo in den Stapel geschoben, dann haben wir es wieder im Stapel gespeichert? Was bedeutet das Speichern einer Referenz in einer lokalen Variablen? Wo lebt diese lokale Variable? Derselbe Stapel, in den wir das Foo geschoben haben, oder handelt es sich um separate Stapel?

Wenn ich an diesem Punkt eine Methode für das erste Objekt aufrufe, das ich in den Stapel verschoben habe, da der Stapelzeiger auf das letzte Element zeigt, das ich verschoben habe, wie wird sie verarbeitet?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage