Итак, я знаю, что существует 2 области памяти: Стек и Куча.
Я также знаю, что если вы создадите локальную переменную, она будет жить в стеке, а не в куче. Стек будет расти по мере ввода данных в него, как в:
Теперь я попытаюсь передать путаницу, которую я вам даю:
Например, этот простой код Java:
public class TestClass {
public static void main(String[] args) {
Object foo = null;
Object bar = null;
}
}
преобразуется в этот байтовый код:
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;
где по определению acons_null:
push a null reference onto the stack
и astore_1:
store a reference into local variable 1
Смятение, которое я испытываю, это то, что мы вложили foo в стек, и мы снова сохранили его в стеке? Что означает сохранение ссылки в локальной переменной? Где живет эта локальная переменная? В том же стеке мы ввели foo или эти отдельные стеки?
Теперь, когда я вызываю метод на первом объекте, который я вставлял в стек, поскольку указатель стека указывает на последний элемент, который я нажал, как он будет обрабатываться?