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

推薦する

第 104 号、A5 ページのドメイン名投資と取引市場に関する議論からインスピレーションを得た

ドメイン名の売買は最近、数え切れないほどのウェブマスターの注目を集めています。hao123ドメイン名...

spinservers: 米国独立サーバー、月額 69 ドル、e3-1280v5、32gDDR4、1TNVMe、30T トラフィック/2*10Gbps 帯域幅

spinservers は、米国サーバーのプロモーションを新たに開始しました。今回は、e3 のハイエ...

インタビュー: 仮想マシン スタックに関する 5 つの質問それを聞いて嬉しかったです。

[[399686]]面接に向かう途中「チン、チン、チン…」マスター、ここはどこですか?まだ面接に急が...

オンラインマーケター必携:Google Chrome の 5 つのトップ拡張機能

起業家および事業主の皆様へ:私はマーケティングの反逆者、Pu Jiang です。ウェブサイトの SE...

コメントベースのプロモーションで勝つには?節度を保つにはどうすればいいでしょうか?

Baidu に「コメントベースのプロモーション」と入力すると、コメントがプロモーションであるという記...

マイクロソフト、Windows Virtual Desktop 機能の重要なアップデートを発表

仮想デスクトップは、Microsoft のクラウド コンピューティング プラットフォームによって企業...

クラウド時代のIT活性化に向けてCIOが取っている10のステップ

デジタル経済が発展するにつれて、CIO が負うリスクも増大しています。顧客体験を向上させ、市場の混乱...

Zhihu:Duowan Game Networkはどのように発展したのでしょうか?

1. 勤勉な編集者のグループ(これについては詳しく説明する必要はありません)。 1.1. フォーラム...

#黒5# geecdn: 45% 割引、香港 VPS、米国 VPS、フランスの高防御 VPS

geecdn(2017年創業)が、いち早く「ブラックフライデー」プロモーションを実施。フランスのOV...

ロシアのフラッシュセールサイトKupiVIPが3,800万ドルの資金調達を受ける

今週、ロシアのフラッシュセールサイトKupiVIPは、複数の大手投資家を含む3,800万ドルの資金を...

Ctripの脆弱性は、インターネット業界全体のセキュリティ意識の低さを露呈している

ユーザーの支払い情報を保存したり、ユーザーのパスワードをプレーンテキストで保存したり... Web ...

世界が変化する中、ベテランたちはウェブサイトの最適化とランキングに関する考え方の変化について語る

国内のITインターネットの急速な発展に伴い、著者が従事しているSEO検索エンジン最適化業界を含め、各...

ロングテールキーワードは多ければ多いほど良いのか?従来のSEOコンセプトを最適化する必要がある

ロングテールキーワードは一般的に単語数が多く、2~3語(語句またはフレーズ)で構成されることが多く、...

Hiformance: すべての VPS が 20% オフ、1GB メモリの VPS は年間 6 ドルのみ

hiformance 割引コードが再び登場しました: ストア内のすべての製品が 20% オフ、更新価...