Javaでメソッドが呼び出されたときのメモリマップ

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();

ここに画像の説明を挿入
メソッド領域のトークのメソッドシグネチャでスタックをプッシュします
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_38705144/article/details/109496843