メモリ内での Java メソッド呼び出しの実行プロセスは何ですか?

PHPz
リリース: 2023-04-18 17:13:03
転載
1675 人が閲覧しました

1. 前提

1. スタック メモリの概略図

メモリ内での Java メソッド呼び出しの実行プロセスは何ですか?

2. JVM はどのようにメソッドを実行するのか???

  • 1. 実行フェーズ中、classLoader クラス ローダーは、クラス ファイル内のメソッドに対応するコード フラグメントをメモリ領域のメソッド領域に配置し、次回メソッドが実行されたときに使用できるようにします。と呼ばれるこのメソッド。

  • 2. プロセスの実行中、JVM は メソッド呼び出しの順序に従って、メソッド内のコード ブロックをメモリ内のスタック領域にプッシュします。スタックのポップと実行操作を実行するステートメントの順序 (上から下、内側から外側)

#2. 呼び出し (実行) プロセス

#1. ルールメソッド呼び出し

メソッド

初めて呼び出すときは、メソッドの対応するコード ブロックがクラス ローダーを通じてメモリ メソッド領域にロードされます。メソッドが呼び出される これは、

スタック プッシュ プロセス

と同等です。メソッド内のすべてのステートメントが実行されると、メソッドはスタックからポップされます (スタックがポップされない場合、 スタックはオーバーフロー例外)2. サンプルコード

public class Practice {
    public static void main(String[] args) {
        System.out.println("main 开始");
        show1();
        System.out.println("main 结束");
    }
    public static void show1(){
        System.out.println("show1 开始");
        show2();
        System.out.println("show1 结束");
    }
    public static void show2(){
        System.out.println("show2 开始");
        System.out.println("show2 结束");
    }
}
ログイン後にコピー

3. プログラム全体のメソッド呼び出しの処理図

3.1 JVM main メソッドが自動的に呼び出されます。したがって、main メソッドは最初にスタックをプッシュし、次に main メソッド内のステートメントを順番に実行します。

メモリ内での Java メソッド呼び出しの実行プロセスは何ですか?##3.2 show1() メソッドに遭遇すると、show1( ) メソッドがスタックにプッシュされ、show1 メソッド内のステートメントが実行されます。 show1 メソッド内のステートメントで、show2() が実行されると、show1 メソッドは一時停止し、show2 メソッドをスタックにプッシュしてから、show2 メソッドの内容を実行します。

メモリ内での Java メソッド呼び出しの実行プロセスは何ですか?3.4 show2 メソッドの内容が実行されると、show2 メソッドはスタックからポップされ、show1 メソッドで show2 メソッドが呼び出された場所に戻ります。戻り値を受け取ると、次のステートメントが実行されます。

メモリ内での Java メソッド呼び出しの実行プロセスは何ですか?3.5 show1 メソッドの実行後、show1 メソッドがスタックからポップされ、次のステートメントに戻ります。 show1 メソッドが呼び出される場所を指定し、show1 メソッド呼び出しと後続のステートメントを実行します

4. スクリーンショットを実行するサンプル コードメモリ内での Java メソッド呼び出しの実行プロセスは何ですか?

以上がメモリ内での Java メソッド呼び出しの実行プロセスは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート