Java 仮想マシンはクラスをどのようにロードするのでしょうか?

Java 仮想マシンはクラスをどのようにロードするのでしょうか?

[[258793]]

まず、JVM がクラスをロードする一般的なプロセスは、次の 3 つのステップに分かれています。

  • 負荷
  • リンク
  • 初期化

では、すべての Java クラスはこの 3 段階の方法でロードされるのでしょうか? Java データ型から始めることができます。 Java は基本型と参照型に分かれています。オブジェクト指向の特性によれば、すべてがオブジェクトであるため、基本型もオブジェクトである必要があります。ただし、実行効率とメモリ使用量を最適化するために、Java は基本型を特別に処理します。したがって、Java 基本型の読み込みは Java 仮想マシンによって事前に定義されているため、読み込み手順はありません。参照型はクラス、インターフェース、配列です。配列は仮想マシンによって直接生成されます。クラスとインターフェースはバイト ストリームであり、両方をロードする必要があります。

文章

Java プリミティブ型

まずは、基本型のデフォルト値と値の範囲を見てみましょう。

要約する

1. 符号なし型: boolean と char

2. Java仮想マシンでは、booleanは仮想マシン仕様に従ってint型に変換され、falseは0、trueは1になります。

参照タイプ

参照型の配列は、Java 仮想マシンによって直接生成されます。次に、クラスとインターフェースについて説明します。便宜上、これらを総称してクラスと呼びます。クラスのロードは 3 つのステップに分かれています。

負荷

ロードはローダーを通じて行われます。 Java 仮想マシンには、親委任モデルと呼ばれる読み込みメカニズムがあります。具体的には、クラス ローダーがこのクラスを取得すると、まずそれを親クラス ローダーにロードします。親クラスローダーが要求されたクラスを見つけられない場合は、このクラスローダーにロードします。彼は今でも年長者を尊敬し、若者を愛しています。ローダーは多数ありますが、Java 9 以前は 3 つのカテゴリに分かれていました。Java 9 以降は 2 つのカテゴリに分かれています。

分類:

Java 9以前

  • ブート クラス ローダー: 最も基本的かつ重要なクラスのロードを担当します。たとえば、jre の lib ディレクトリ内の jar パッケージに保存されているクラスや、仮想マシン パラメータ -Xbootclasspath で指定されたクラスなどです。
  • 拡張クラス ローダー: 拡張クラス ローダーの親クラス ローダーは、ブートストラップ クラス ローダーです。拡張クラス ローダーは、比較的マイナーだが一般的なクラスをロードします。たとえば、jre の lib/ext ディレクトリの下にある jar パッケージ内のクラスや、システム変数 java.ext.dir で指定されたクラスなどです。

アプリケーション クラス ローダー: アプリケーション クラス ローダーの親クラス ローダーは拡張クラス ローダーです。アプリケーション パスをロードするアプリケーションのクラスをロードする役割を担います (ここでのアプリケーション パスは、仮想マシン パラメータ -cp/-classpath、システム変数 java.class.path、または環境変数 CLASSPATH によって指定されたパスです)。

Java 9以降

クラスローダーを起動します: 上記と同じ

プラットフォーム クラス ローダー: Java9 ではモジュール システムが導入されているため、起動クラス ローダーによってロードされるいくつかの主要モジュールを除き、残りはプラットフォーム クラス ローダーによってロードされます。

クラス ローダーは、ロード関数の提供に加えて、Java パッケージ名に非常によく似た名前空間関数も提供します。同じクラスであっても、クラスローダーが異なると名前が異なるため、2 つのクラスは同じクラスではありません。

リンク

リンクとは何ですか?ロードされたクラスを Java 仮想マシンにマージして実行できるようにするプロセスです。具体的なプロセスは、検証、準備、分析の 3 つのステップに分類できます。

検証: 検証の目的は、Java 仮想マシン仕様に準拠することです。

準備: ロードされたクラスの静的フィールドにメモリを割り当てます。一部の Java 仮想マシンでは、この段階で、仮想メソッドの動的バインディングを実装するために使用されるメソッド テーブルなど、クラス階層に関連する他のデータ構造も構築されます。

分析: クラス ファイルが仮想マシンにロードされる前は、クラスはメンバー変数とメンバー メソッドのアドレスを認識していないため、コンパイラはシンボリック参照を生成します。このシンボリック参照には、クラス名、ターゲット メソッド名、受信したパラメーターの型、および戻り値の型が含まれます。解決とは、この記号参照を実際の参照に変換するプロセスです。シンボリック参照によって指されるクラスがロードされていない場合、このクラスのロードはトリガーされますが、リンクおよび初期化は行われません。

Java 仮想マシン仕様では、解析を完了するためにリンク プロセスは必要ありません。一部のバイトコードがシンボリック参照を使用する場合、これらのバイトコードを実行する前に解析を完了する必要があります。

初期化

初期化は静的フィールドを初期化することです。静的フィールドが final によって変更された場合、フィールドは定数値としてマークされ、その初期化は Java 仮想マシンによって直接完了します。 Javaコンパイラは、静的フィールドを初期化する残りのコードを、

初期化とは、定数値を直接割り当てて実行することです。方法のプロセス。 Java仮想マシンはロックすることでこれを保証しますメソッドは一度だけ実行されます。

では、初期化はいつトリガーされるのでしょうか。

1. 仮想マシンが起動したら、ユーザーが指定したクラスを初期化します。

2. 新しいターゲット クラス インスタンスを作成するための新しい命令に遭遇したら、新しい命令のターゲット クラスを初期化します。

3. 静的メソッドを呼び出す命令に遭遇したら、静的メソッドが配置されているクラスを初期化します。

4. ただし、静的フィールドにアクセスする命令に遭遇すると、静的フィールドが配置されているクラスが初期化されます。

5. サブクラスの初期化により、親クラスの初期化がトリガーされます。

6. インターフェースがデフォルト メソッドを定義している場合、そのインターフェースを直接または間接的に実装するクラスの初期化によって、インターフェースの初期化がトリガーされます。

7. リフレクション API を使用してクラスがリフレクション的に呼び出されると、クラスが初期化されます。

8. MethodHandle インスタンスが初めて呼び出されると、MethodHandle によって指されるメソッドのクラスが初期化されます。

<<:  クラウド大手は AI 市場の残り 96% をどのように活用するのでしょうか?

>>:  Project EVE はエッジコンピューティングへのクラウドネイティブアプローチを推進します

推薦する

海外のEコマースサイトのファッションデザイン要素7つを紹介

最近、電子商取引ウェブサイトのデザインに関するケーススタディを書きたいと思っており、国内の電子商取引...

raksmartのCN2ライン香港クラウドサーバーの簡単なレビュー

raksmartクラウドサーバーはどうですか? raksmart香港クラウドサーバーはどうですか? ...

不適切なクラウドコンピューティング構成はデータセンターにセキュリティ上の課題をもたらす

最近の調査では、不適切に構成されたパブリック クラウド インスタンスが組織の機密データにセキュリティ...

検索エンジンコンパスは百度の変化を深く理解している

SEO は永遠に変わらないと思っていると、ウェブサイトはうまく発展しないでしょう。百度の変化は毎日感...

PTCの優れたパートナープログラムは、テクノロジー、ソリューション、サービスプロバイダーがビジネスの成長と機会の獲得を支援します。

PTC は最近、パートナー プログラムの成長が引き続き好調で、昨年はパートナーの半数以上が 2 桁の...

ユーラシアクラウド: 香港 BGP 618、日本 CN2 月額料金は 21 元/月から、2 時間/2g/50 帯域幅/1000g トラフィックは 199 元/年。

ユーラシアクラウドは、毎年恒例の618特別イベントを開始しました。全アイテムが25%オフとなり、更新...

米国のフラッシュセールサイトFabが成長中:1分間に5.4個の商品が売れる

Fab: クリエイティブな商品を宣伝するショッピングサイト新浪科技報、北京時間1月7日朝のニュース、...

自社の強みと商品サービスが口コミマーケティングの基盤となる

今日のインターネットの新しい状況の下で、さまざまな業界で革新の優位性を持つ多くの新興企業が出現しまし...

リンクは SEO 環境に影響します: 関連のある外部リンクを構築するいくつかの方法

「最近、百度の不正行為防止アルゴリズムが再び更新され、アップグレードされました。今回の百度のシステム...

中国はなぜ「Travel Frog」のようなゲームを作れないのか?

Taptapのゲーム「旅かえる」(日本語:「旅かえる」)のレビューでは、ネットユーザー@萌小黑による...

ウェブマスターは6月に起こりうるアルゴリズムの更新にどのように対処すべきか

6月がまたやってきました。今年の6月に百度は再びアルゴリズムのメジャーアップデートを行うのでしょうか...

リサーチダイブ:2027年までに、世界のコグニティブクラウドコンピューティング市場の収益は1兆888億7000万ドルに達する

海外メディアは、市場調査会社リサーチ・ダイブが最近発表したレポートで、2027年までに世界のコグニテ...

#推奨: WLS - $15/年/リセラー/60ssd/1Tトラフィック/WHM/Cpanel

weloveservers は、仮想ホストと仮想ホスト再販業者を含む、独立記念日特別オファーを 7 ...

検索エンジンリンク分析におけるリンク最適化

ウェブサイトの最適化において、よく言われる「コンテンツは王、リンクは女王」という言葉は、今やこの2つ...

raksmart: 40% オフ、米国 CN2 VPS/香港 VPS/日本 VPS、無制限トラフィック、Windows Server 2003 以降

今月初めて、raksmart はすべての VPS (米国 VPS、米国 CN2 VPS、香港 VPS...