Javaでメソッドが呼び出されたときのメモリマップ
まず、Javaのメモリマップを理解する必要があります。
クラスで記述された最初のメソッドは次のとおりです。
/**创建一个学生的类,
*/
public class Student {
String name;
int age;
public void study() {
System.out.println("study");
}
public void talk() {
System.out.println("talk");
}
}
クラスファイルが生成された後、クラスローダーを介してクラスファイルがメソッド領域に読み込まれます。保存形式は次のとおりです。
テストプログラムで、学生クラスを呼び出します。
public class TestStu {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "Tom";
stu.age = 18;
stu.study();
stu.talk();
}
}
テストプログラムのmainメソッドが実行されると、最初のmainがスタック内のメモリ空間を開き、プログラムが実行されると
Student stu = new Student();
stuのメモリはスタックに割り当てられ、ヒープで開かれたメモリ空間のアドレスに格納されます。ヒープで開かれたメモリ空間はメソッド領域でのテンプレート開発であり、共通属性のメモリが開かれます。
mainメソッドが実行されたとき
stu.study()
スタディメソッドはスタックを開始します(後入れ先出し、後入れ先出し、スタックの最上位で要素を実行します)、
メソッドは署名の形式で存在し、メモリスペースはそれらが呼び出されたときにのみ割り当てられます。
スタディメソッドの呼び出しが完了したら、スタックからポップアウトして実行します
stu.talk();
メソッド領域のトークのメソッドシグネチャでスタックをプッシュします