blog

JVMのクラス・ローディング・プロセスをより深く理解する

その名が示すように、クラス・ローダーはJavaクラスをJava仮想マシンにロードするために使用されます。一般的に言って、Java仮想マシンは以下の方法でJavaクラスを使用します。.javaファイルは...

Apr 16, 2020 · 3 min. read
シェア

クラス・ローダーの基本概念

その名前が示すように、クラス・ローダーはJavaクラスをJava仮想マシンにロードするために使用されます。一般に、Java仮想マシンはJavaクラスを次のように使用します:

.javaファイルはコンパイラによってコンパイルされた後、バイトコードの.classファイルに変換されます。クラス・ローダは、.class ファイルを読み取り、Class クラスのインスタンスに変換します。このような各インスタンスはJavaクラスを表すために使用され、そのクラスのオブジェクトはnewまたはクラスのnewInstanceによって作成することができます。実際の状況はもっと複雑で、たとえばJavaバイト・コードがツールによって動的に生成されたり、ネットワーク経由でダウンロードされたりすることがあります。

JavaJavaのクラス・ローディング・プロセス

javaのクラスロードの手順は次のとおりです。

注:関連するプロセスは厳密には連続的ではありません。例えば、ロード時に検証が開始され、交互に実行される場合があります。

ローディング

ロードとは、コンパイルされた .class ファイルをメモリのメソッド領域に読み込んで、プログラムがアクセスできるようにすることです。

完全修飾名でクラスのバイナリ・バイト・ストリームを取得します。

コネクション

糺す

ロードフェーズは必ずしもすべてのロードされた.classファイルではないので、いくつかのネットワークリソースがあるかもしれないので、独自のセキュリティのためにJVMは、最初のファイル形式をチェックします。

意図する

準備段階では、静的変数のメモリ確保と変数の初期値設定に集中します;

public static int num = 1; 準備段階の値は 0 です。

public static final int num = 1; このような定数は準備段階で割り当てられます。

パース

構文解析の段階では、記号参照と直接参照の2つの概念があります。

書かれたネイティブ・コードが.classファイルにコンパイルされた後、メソッド呼び出し間の関係は、シンボリック参照であるバイトコードを通して存在します;

そして、JVMがクラスをメモリにロードした後、メソッドはオブジェクトのアドレスを通してお互いを呼び出さなければなりません;

そして、解析段階で行われるのは、.classファイル内のシンボリック参照を直接参照に変換することです。

初期化

初期化フェーズでは、クラスの静的コード・ブロックを呼び出し、静的な静的変数に初期値を代入します。

注:クラスは複数のスレッドによって同時に実行することができ、JVMはロックを追加することによって特異性を保証します;

クラスローダーと

使い方は、オブジェクトを直接newするか、reflectionのnewInstanceでクラスのインスタンスを取得して、何らかの操作を実行するというものです。

コンパイルJITの実行

JITのランタイムコンパイルは、Javaバイトコードの再コンパイル最適化、マシンコードを生成するために、CPUが直接実行されるように、コンパイルされたコードがより効率的に、通常、すべてのJavaメソッドがマシンコードにコンパイルされていない、主な必要性は、事前にマシンコードにコンパイルされた最長の時間のメソッドを見つけるために、最長のCPU時間を占有し、最も頻繁に呼び出すには、このメソッドは、ホットスポットの方法です。このランタイムオンデマンドのコンパイルはJITです!

JITは、書き込み権限と実行権限を持つメモリの一部を申請し、コンパイルされたJavaメソッドをマシンコードにコンパイルしてあらかじめメモリに書き込んでおき、メソッドを呼び出す必要があるときにこのメモリを呼び出すようにすることで実装されます。

Read next

公式:HashMapのgetメソッドについて話すなら、getTreeNodeメソッドの具体的な実装について詳しく話すのが一番だ!

前書き\n"\n\n\n\n"\n\n「まだHashMapソースコードのメンバ変数を理解していないのですか? 来てください来てください!整理されたメンバ変数のソースコード解析\n「第二篇」 ジャーク、ジャーク、ジャーク HashMapのソースコードでピットのコンストラクタのメソッドをまた踏む!!!!毎度毎度、何か出ます。\n"

Apr 16, 2020 · 6 min read