JVM基本マインドマップ(継続更新)

JVM基本マインドマップ(継続更新)

ここに画像の説明を挿入

JVM

JVMの内部構造

バイトコード実行エンジン

  • タスクは、バイトコード命令を対応するプラットフォーム上のローカルマシン命令にコンパイルして実行することです。

JVMメモリモデル

内部関係

  • プログラムカウンター

    • 場所:各スレッドが占める独立したメモリ領域には、スレッドのプログラムカウンタを配置するために使用される領域の一部があります。

      • .classファイル(java -cによって取得)

バイトコードファイルの各メソッドに対応する解析済みコンテンツ

コード:0-nは必要な実行位置
(行数)です

- 用处:用于记录当前线程正在执行的代码的位置(行号)
- 存在原因:假如CPU执行该线程到一半去干别的活,当前线程被挂起,那么就需要知道被插队前执行到哪了,以方便CPU回来干活后能从上一个记录点继续
- 数值变化:每运行完一行,程序计数器存放的值会被字节码执行引擎修改
  • メソッド領域(メタスペース、永続的な生成)

    • ストレージの内容:
      定数、静的変数、クラス情報
  • ネイティブメソッドスタック

    • ネイティブメソッド専用のメモリスペース:

ネイティブの変更されたメソッド、つまりC言語で記述された基になるメソッドが呼び出されると、JVMはスレッドのメモリ空間にその領域を描画します。

  • スレッドスタック

    • 各スレッドが実行を開始する前に、JVMはスレッドがローカル変数を格納するための独立したスタックメモリスペースを割り当てます。

      • スタックフレームメモリ:
        スレッドでは、メソッドが実行されるときに、JVMはこのメソッドに独立したメモリ空間を割り当てて、ローカル変数(国内の人形)を独自のスタックメモリ空間に格納します。

メソッド呼び出しが完了すると、メソッドが占有していたスタックフレームメモリが解放されます。

スタックメモリ順序(FILO):プログラムメソッドのネストされた呼び出しは、スタックと同じ構造を持っています

		- 栈帧内存内部:
  1. ローカル変数テーブル

  2. オペランドスタック

  3. 動的リンク

  4. メソッドのエクスポート

     		- 局部变量表:
    

これは、メソッドパラメータとメソッド内で定義されたローカル変数で構成される変数値のストレージスペースであり、その容量はSlot1を最小単位の
オペランドスタックとして使用します。

LIFOスタック、バイトコード命令によるスタックへのデータの保存とフェッチ-
ダイナミックリンク:

各スタックフレームには、ランタイム定数プールでスタックフレームが属するメソッドへの参照が含まれています。この参照は、メソッド呼び出し中の動的接続をサポートするために保持されます。
-メソッドのエクスポート:

メソッドを呼び出したPCカウンターの値を格納します。メソッドが開始するとき、このメソッドを終了する方法は2つだけです
。1。実行エンジンは、任意のメソッドによって返されるバイトコード命令を検出します。これは、いわゆる通常の完了終了です。2.メソッドの実行中に例外が発生し、その例外はメソッドで処理されませんでした。つまり、このメソッドの例外テーブルに一致する例外ハンドラーが見つからない限り、メソッドは終了します。異常完了出口になります。

正常完了出口と異常完了出口の違いは、異常完了出口を通る出口は、上位の呼び出し元に戻り値を生成しないことです。

どちらの方法で終了しても、メソッドが終了すると、メソッドが呼び出された場所に戻ります。メソッドが正常に終了すると、呼び出し元のpcカウンターの値が戻りアドレスとして使用され、例外によって終了した場合は、リターンアドレスは例外を介して処理する必要があります。情報のこの部分は通常、スタックフレームに格納されません。

- 存放堆中对象的内存地址
  • ヒープ

    • ストレージ:
      新しいオブジェクト

    • ヒープの内部構造

      • 若い世代

        • Eden区

          • エデンエリアがいっぱいになると、マイナーGCがゴミを集めるようになります

            • ガベージコレクションの原則
        • サバイバーエリア

          • から
          • To区
      • 老齢

        • 老後、フルGCがゴミ収集にやってくる

          • フルGCが作業を終了した後も、位置がなく、OOMが発生します
  • チップ:

    • ヒープとメソッドの領域は、スレッドによって共有される領域です

    • ヒープメモリサイズの割り当て:
      若い世代:
      Eden:From:To = 8:1:1

    • サバイバーエリアから老後エリアへ:

  1. 長期生存:世代年齢は15歳に達する
  2. オブジェクトの動的年齢判断:非ガベージオブジェクトのサイズが、入力されるサバイバー領域の1/2を超えている
  3. ラージオブジェクト:(文字列、配列など)JVMパラメーターはラージオブジェクトのサイズを設定できます。しきい値を超えると、直接古い年齢になります。

JVMチューニング

JVMチューニングの目的

  • ユーザーの一時停止時間を短縮する

    • STW時間を短縮する

      • フルGCの数を減らす

参照:

  1. 2020年に、最新のJava仮想マシンJVMの基礎となる主成分分析ビデオチュートリアルの完全なセットプログラマーZhuge
    取得元:https://www.bilibili.com/video/BV1dJ411G7YJ?p = 7
  2. Java JVMのヒープ、スタック、およびメソッド領域の詳細な説明— Zhang Qilu
    取得元:https://blog.csdn.net/zhangqiluGrubby/article/details/59110906

おすすめ

転載: blog.csdn.net/weixin_45356787/article/details/113447460