blog

JVMの構造と各部の機能を詳しく解説する

JDKは、JavaプログラマーがJavaプログラムのコンパイルやデバッグを行うために一般的に使用する開発パッケージです。 JREとはJava Runtime Environment(Java実行環境)...

May 20, 2020 · 3 min. read
シェア

はじめに

jrejdk、jvm、jdk、jvmの関係

JDKはJavaプログラマーのための一般的な開発パッケージで、Javaプログラムのコンパイルとデバッグを目的としています。

JREとはJava Runtime Environment(Java実行環境)のことです。

JVMは、Java仮想マシンの頭字語であり、実行するために特定のマシンコードにバイトコードを解釈する責任があり、それは実行時のプロセスでは、Javaのソースプログラムは、.classファイルとしてコンパイラを介してコンパイルする必要があることは注目に値する、そうでなければ、JVMが認識されません。

jvm構成

まず、jvmのコンポーネントがどのようなものかを見てみましょう。

jvm

クラス・ローディング・サブシステム

ファイルシステムやネットワークからクラス情報をロードする役割を担い、ロードされた情報はメソッド領域と呼ばれるメモリ空間に格納されます。

メソッド

文字列リテラルや数値定数を含む、クラス情報、定数情報、定数プール情報を格納するために使用します。一般的に使用されるリフレクションは、このメソッド領域から読み出されるクラス情報です。

Java

ヒープ空間はjvmの起動時に生成されるメモリ領域で、ほとんどすべてのオブジェクトインスタンスがこの空間に配置されます。

この領域は新世代と旧世代に分けられ、その後、しばしばGCゴミ収集メカニズムとも呼ばれる、ヒープ空間のゴミデータの主な回収である説明に焦点が当てられています。

ヒープ空間のデータはすべてのスレッドで共有されるため、スレッドセーフの問題が発生します。そこで、ヒープ空間のデータに対するスレッドセーフの問題を解決するために、これらのロックが作成されます。

ダイレクトメモリー

ダイレクト・メモリは仮想マシンのランタイム・データ領域の一部ではなく、仮想マシンの仕様で定義されたメモリ領域でもありませんが、この部分も頻繁に読み書きが行われるため、OutOfMemoryError例外が発生する可能性があります。

JavaのNIOのallocateDirectメソッドは、ダイレクト・メモリを直接使用することができ、読み書きの速度を大幅に向上させることができます。

Java

これは、多くの場合、スタックスタックの2つの兄弟の1つは、すべてのスレッドがヒープ空間のデータを共有すると言われていますが、スタック空間は、各スレッドに固有のものであり、それぞれが直接アクセスすることはできません。

スタック空間は、スレッドが作成されるときに作成されるメモリ空間で、スタックは主にいくつかのローカル変数、メソッドパラメータ、Javaメソッド呼び出し、戻り値やその他の情報を格納します。

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

ネイティブ・メソッド・スタックがJavaスタックと異なるのは、Javaネイティブ・メソッド、つまりJDKでnativeと変更されたメソッドを直接呼び出せる点です。

ゴミ収集システム

GCのゴミ収集は、知識の非常に重要なポイントは、プログラムが実行するのに十分なメモリ領域を持っていることができることを確認するために、メモリが無効なデータをリサイクルしている、我々はゴミ収集の日常生活を理解することができます。

リサイクルアルゴリズムには、一般に、マーク除去アルゴリズム、コピーアルゴリズム、マーク照合アルゴリズムなどがあり、それぞれについては、次回以降に詳しく説明します。

PC

これは、各スレッドのプライベート空間であり、JVMは各スレッドごとに独立したPCレジスタを作成します。どの瞬間でも、Javaスレッドは常にメソッドを実行しており、このメソッドをカレントメソッドと呼びます。カレントメソッドがローカルメソッドでない場合、PCレジスタは現在実行中の命令を実行します。現在の環境ポインタ、プログラム・カウンタ、演算スタック・ポインタ、計算変数ポインタなどの情報を格納します。

実行エンジン

jvmは非常にコアなコンポーネントで、jvmバイトコードの実装を担当し、一般的に実行後にマシンコードにコンパイルされます。

おわりに

今日は、jvmの構造の主な導入は、jvmの最初のマクロを見て、各ポイントの詳細な説明、ヒープとは何か、GCのゴミ収集とは何か、その他の知識は、楽しみにしてください。

IT

返信:Javaのチュートリアルのフルセットは、あなたが得ることができます:Javaの基礎、JavaのWeb、スプリングブートなどを含むJavaEEすべてのチュートリアル!

返信: 履歴書テンプレート、100の美しい履歴書を取得します!

回答:Javaの学習ルートは、最新かつ最も完全な学習ロードマップを得ることができます!

返信元】 Java eBooks、トッププログラマー必読の13冊を手に入れましょう!

Read next

CORSポリシーによってブロックされた:プリフライトリクエストへの応答が通過しない 解決済み

この問題は、クロスドメインの問題の文字通りの意味を通じて見ることができ、これは、コードのフロントエンドとバックエンドをチェックすることですが、クロスドメインが設定されていない、例えば、私は今回、バックエンドが正しく取得しなかったので、この種のエラーを報告しました。それはvueの場合、それは次のようにすることができます、ない場合

May 20, 2020 · 1 min read