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年分散ストレージ技術セミナーが成功裏に開催されました

推薦する

地域ポータル分析レポート(II):地域ポータルの商品選択

前回の記事「ローカルポータル分析レポート(I):ローカルポータルの市場はまだあるか?」では、ポータル...

オープンソースモデルにおけるクラウドコンピューティングとビッグデータの現状

「オープンソース」モデルには多くの利点がありますが、最も魅力的なのは、企業のコスト削減に役立つことで...

3 つの事例から、データ ウェアハウスのデータ フローを構築する方法を学びます。

翻訳者 |張峰企画 |趙雲データフロー、分析、その他のソフトウェア開発など、プロジェクトごとに課題が...

EasyStackは、2018年のOpenStackユーザー調査レポートで世界トップ3にランクイン

2018年11月13日、ドイツのベルリンでOpenStack Summitが開催され、OpenSta...

oneprovider - シンガポール/韓国/日本、専用サーバーは最低59ドル

おそらく多くの人がoneprovider.comをご存知でしょう。この会社は非常に強力な仲介業者であ...

2012 第 7 回中国インターネット ウェブマスター年次会議 5 つのハイライト

2012 年第 7 回中国インターネット ウェブマスター年次会議は、4 月 7 日に北京国際会議セン...

Apple、2013年に最も人気があったアプリとゲームを発表

Apple は本日、2013 年に最も人気のある無料 iOS アプリ (iPhone および iPa...

マーチャント推奨: 低コストのマネージドホスティング/VPS/サーバーに特化したHostwinds

Hostwinds は 2009 年に HostCat に初めて登場しました。ウェブマスターは長い間...

Canalys:世界のクラウドインフラサービス支出は2023年に2,904億ドルに達する見込み

Canalysは最近、2023年第4四半期の世界のクラウドインフラサービス支出データを発表しました。...

1つの記事で完了! Saga 分散トランザクションを 10 分で説明する

[[388307]]この記事は、Cui Hao 氏が執筆した WeChat 公開アカウント「Shis...

SEOに加えて、ウェブサイトのプロモーション中に学ぶべき知識がいくつかあります。

ウェブサイトのプロモーションは、決して単純な SEO ではありません。同様に、SEO の専門家は、「...

インターネットマーケティングは本当に中小企業にとって最優先事項なのでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています中小企業は...

ウェブサイトを構築するには、魔法の鏡から学ぶ必要があります。対戦相手はあなたにとって最高の教師です。

現在、ウェブサイトの最適化は競合他社の調査と切り離すことはできません。実際、競合他社を分析するプロセ...

Rectified VPS チュートリアル、Rectified 設定、Rectified 再インストール、Rectified VPS の使用方法は?

多くの初心者は VPS の使用経験がほとんどなく、VPS について何も知らないため、修正された VP...