Java 仮想マシン: JVM の概念と原理の詳細な説明と GC メカニズムの分析

Java 仮想マシン: JVM の概念と原理の詳細な説明と GC メカニズムの分析

[[311892]]

1. Javaヒープ:

(1)はJava仮想マシンが管理する最大のメモリブロックです。

(2)仮想マシンの起動時に作成されます。ヒープは JVM のすべてのスレッドによって共有されます。

(3)オブジェクトインスタンスを保存することが唯一の目的です。ほぼすべてのオブジェクト インスタンスと配列は、ここでメモリを割り当てる必要があります。

2. JVMスタック(Java仮想マシンスタック):

(1)各スレッドが生成されると、JVMスタックフレームが生成されます。 JVM スタック内の各スタック フレームには、現在のスレッドの基本型のローカル変数が格納されます。

3. ネイティブメソッドスタック:

(1) JVMのネイティブメソッドとは、修飾子が「native」であるが、メソッド本体がJavaコードで記述されていないメソッドです。

(2)その機能はJava仮想マシンスタックの機能と似ているが、仮想マシンスタックはJavaメソッドを実行するために仮想マシンに機能し、ローカルメソッドスタックは仮想マシンが使用するネイティブメソッドに機能するという点が異なる。

(3)スレッドプライベートであり、そのライフサイクルはスレッドと同じであり、各スレッドに1つずつ存在する。

4. 方法領域:

(1)仮想マシンの起動時に作成されます。すべての JVM スレッドによって共有されます。

(2)仮想マシンによってロードされたコンパイルされたメソッド実装のすべてのクラス情報、定数、静的変数、およびバイナリマシン命令セットを格納するために使用されます。

5. プログラムカウンタレジスタ:

PC レジスタとも呼ばれる、現在のスレッドによって実行されたバイトコードの行番号のインジケータとして見なすことができる、より小さなメモリ空間です。

仮想マシンの概念モデルでは、バイトコード インタープリターは、このカウンターの値を変更して、次に実行するバイトコード命令を選択することで動作します。分岐、ループ、ジャンプ、例外処理、スレッド回復などの基本機能はすべて、このカウンターに依存して完了します。


概要: 仮想マシン スタック、ローカル メソッド スタック、プログラム カウンターの 3 つのモジュールはスレッド専用です。モジュールの数はスレッドの数と同じで、モジュールの宣言サイクルは、モジュールが属するスレッドの宣言サイクルと一致します。プログラムカウンタを例にとると、スレッドを順番に切り替えて実行時間を割り当てることでマルチスレッド化が実現されます。

そのため、スレッドが正しい実行位置に戻ると、各スレッドは独立したプログラム カウンターを持ち、スレッド間のカウンターは互いに影響を及ぼさず、独立して保存されます。残りは JVM 仮想マシンのライフサイクルと共有されます。

6. クラスローダーサブシステム:

(1)指定されたクラス名(java.lang.Objectなど)に従って、クラスファイルの内容をRuntimedataareaのmethodareaにロードします。

(2)(1)のロード処理は、クラスローダーが起動されると、クラスローダーはJVMのヒープ内に存在し、その後ホストハードディスクに移動してA.classをJVMのメソッド領域にロードします。

7. 実行エンジン:

(1)クラスローダーサブシステムからロードされたクラスのメソッド領域に含まれる命令セットの実行を担当する。平たく言えば、クラスローダーサブシステム

(if を使用する場合、add、subtract) はすべて命令の形式でメソッド領域にロードされ、実行エンジンがこれらの命令の実行を担当します。

8. 通訳:

バイトコード命令を 1 つずつ読み取り、解釈し、実行します。命令を一つずつ解釈して実行するため、バイトコードは速く解釈できますが、実行は遅くなります。これはインタープリタ型言語の欠点です。バイトコードの「言語」は基本的に解釈されます。

9. コンパイラ:

(1. ジャストインタイムコンパイラは、インタープリタの欠点を補うために導入されました。実行エンジンは最初にインタープリタ方式で実行し、適切な場合にジャストインタイムコンパイラがバイトコード全体をネイティブコードにコンパイルします。

(2. その後、実行エンジンは実行メソッドを解釈する必要がなくなり、ネイティブ コードから直接実行できるようになります。ネイティブ コードの実行は、行ごとに解釈するよりもはるかに高速です。ネイティブ コードはキャッシュに保存されるため、コンパイルされたコードは非常に高速に実行できます。

9.1. jdk、jre、JVM の関係:

JDK (Java Development Kit) は、Java 言語用のソフトウェア開発キット (SDK) です。 JDK インストール ディレクトリには jre ディレクトリがあり、その中に bin と lib の 2 つのフォルダが含まれています。

ここで、bin にあるのは jvm、lib にあるのは jvm が動作するために必要なクラス ライブラリであり、jvm と lib を合わせて jre と呼ばれていると考えることができます。

10. 上の図では、ヒープメモリは 3 つの部分に分かれています。

(1. 新生児領域: クラスが生まれ、成長し、消滅する領域です。クラスは生成され、適用され、最後にガベージ コレクターによって収集されてその寿命を終えます。

(2. 退役領域:新規領域から選択された JAVA オブジェクトを格納するために使用されます。通常、プール オブジェクトはこの領域でアクティブになります。

(3. 永続記憶領域は、JDK 自体が持つクラスとインタフェースのメタデータを格納するために使用される常駐メモリ領域です。

つまり、動作環境に必要なクラス情報を格納します。この領域にロードされたデータは、ガベージ コレクターによってリサイクルされません。この領域が占有するメモリは、JVM がシャットダウンされたときにのみ解放されます。

11. java.lang.OutOfMemoryError: Java ヒープ スペース例外が表示され、Java 仮想マシンのヒープ メモリが不足していることを示します。

理由は2つあります。

(a. Java 仮想マシンのヒープ メモリ設定が不十分です。-Xms および -Xmx パラメータを使用して調整できます。

(b. コード内に大量の大きなオブジェクトが作成され、ガベージコレクターで長時間収集できない(参照されている)。

12. 親の委任メカニズム:

JVM は、クラスをロードするときに、デフォルトで親委任メカニズムを使用します。簡単に言うと:

つまり、特定のクラスローダーがクラスのロード要求を受け取ると、まずロードタスクを親クラスローダーに委任し、その後再帰的にロードします(bootStrap、extclassLoader、appclassloaderは親クラスローダーと子クラスローダーです)。

親クラスローダーがクラスロードタスクを完了できる場合は、正常に戻ります。親クラスローダーがこのロードタスクを完了できない場合にのみ、それ自体がロードされます。

13. フル GC はいつ発生しますか?

(1)System.gc()メソッドの呼び出し

(2)旧世代のスペース不足[オブジェクトが新世代に転送され、大きなオブジェクトや大きな配列が作成される場合にのみ、旧世代のスペースが不足します]

(3)不滅ゾーンのスペースが不足している。

(4)大きなオブジェクトをヒープ内に割り当てます。 [たとえば、非常に長い配列の場合、このタイプのオブジェクトは古い世代に直接送られます]

(5)CMS GC中に昇格が失敗し、同時モード障害が発生する

14. GCリカバリの内容:

GC の主な機能は、ヒープ内のオブジェクトをリサイクルすることです。オブジェクトへの参照が存在するかどうかを分析することで、存在しない場合はリサイクルできます。

15. gcの具体的なプロセス:

これは主に、どのリサイクル アルゴリズムが使用され、どのガベージ コレクションが使用されるかによって異なります。主なリサイクル アルゴリズムは次のとおりです。

(1)マークスイープアルゴリズム

(2)マーククリアアルゴリズム

(3)複製アルゴリズム

(4)世代別コレクションアルゴリズム

16. よく使われるガベージコレクター:

(1)シリアルコレクター[シリアルコレクター]

(2)ParNew Collector [シリアルコレクタのマルチスレッド版]

(3)パラレルスカベンジコレクター[PSコレクター]

(4)CMS [旧世代コレクター]

(5)G1コレクター

ガベージ コレクターの使用に関しては、参考までに次のような提案も組み合わせてあります。

<<:  クラウドへの移行を現実にする方法

>>:  Shanyan Dataの2020年分散ストレージ技術セミナーが成功裏に開催されました

推薦する

ユーザーを獲得すれば、検索エンジンよりも優位に立てる

ほとんどのウェブマスターにとって、2012 年は本当に特別な年でした。特にここ数か月は、アルゴリズム...

ハイブリッド クラウドの旅は Linux から始まります。

今日の時代では、組織は顧客に価値を提供する方法を変革するために、新しいテクノロジーと実践に継続的に投...

Googleの「江南スタイル」時代のGoogle PR大幅アップデート

Google PR 値は、ウェブマスターがフレンドリー リンクを交換するための基準の 1 つであるた...

epidrive-$2.95/1g メモリ/30g ハードディスク/250g フロー/G ポート/Phoenix

epidrive は 6 月に設立された非常に新しい VPS プロバイダーです。openvz 仮想化...

Crissic - 年間 15 ドル / 512 GB RAM / 50 GB ハード ドライブ / 2 TB トラフィック [I/O 高速化]

Crissic【(AS62639)】は2009年に設立されたVPS業者です。常に低価格のVPSプロモ...

HarmonOS 分散アプリケーションのインテリジェント トライアングル警告サインの解釈

[[439635]]詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したH...

ウェブサイトのおすすめ: Smallknot 中小企業向けコミュニティ融資プラットフォーム

Smallknot: 中小企業向けコミュニティファイナンスプラットフォーム「中小企業の資金繰り難」は...

mediafire-$2.49/1T スペース/無制限トラフィック/単一ファイル 20G/ストレージ ダウンロード ツール

Mediafire は、古いネットワーク ストレージ Web サイトですが、現在プロモーションを実施...

タオバオ店舗運営における厳しい需要について(第3部)

ユーザーエクスペリエンスは、Taobao ストア運営において厳格な要求事項なのでしょうか? マクロ的...

「クラウドアプリケーション」が経済回復を加速させるが、クラウド化への道のりには課題が残る

「クラウド教室」は授業が中断されても学生が学習を継続できるようにし、「クラウドオフィス」は職場の人々...

Sina Cloud - 友達を招待してクラウドビーンを 1000 個ゲット

Sina Cloudでは、友達を招待して無料のクラウドビーンをもらえるキャンペーンを実施しています。...

フレンドリーリンクを作成する際の2つの利点と3つの注意点

ウェブサイトの最適化は、主にコンテンツと外部リンクの 2 つの部分で構成されます。外部リンクは、ウェ...

QQ、Weibo、Momoの社会的運命

1994年、中国本土初のインターネットBBS「曙光ステーション」がオンラインになりました。その後、水...

cmivps: 春節30%オフプロモーション、香港CMIラインVPS、無制限のトラフィック、「Alipay」が可能

cmivps は、香港 CMI ラインのすべての VPS を 30% 割引する大規模な春節プロモーシ...

Google と Baidu のキーワード最適化の違いは何ですか?

この記事を書いた理由は、数日前、私の会社の競合他社のウェブサイトが百度では私のウェブサイトよりも上位...