まず、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以前
アプリケーション クラス ローダー: アプリケーション クラス ローダーの親クラス ローダーは拡張クラス ローダーです。アプリケーション パスをロードするアプリケーションのクラスをロードする役割を担います (ここでのアプリケーション パスは、仮想マシン パラメータ -cp/-classpath、システム変数 java.class.path、または環境変数 CLASSPATH によって指定されたパスです)。 Java 9以降 クラスローダーを起動します: 上記と同じ プラットフォーム クラス ローダー: Java9 ではモジュール システムが導入されているため、起動クラス ローダーによってロードされるいくつかの主要モジュールを除き、残りはプラットフォーム クラス ローダーによってロードされます。 クラス ローダーは、ロード関数の提供に加えて、Java パッケージ名に非常によく似た名前空間関数も提供します。同じクラスであっても、クラスローダーが異なると名前が異なるため、2 つのクラスは同じクラスではありません。 リンク リンクとは何ですか?ロードされたクラスを Java 仮想マシンにマージして実行できるようにするプロセスです。具体的なプロセスは、検証、準備、分析の 3 つのステップに分類できます。 検証: 検証の目的は、Java 仮想マシン仕様に準拠することです。 準備: ロードされたクラスの静的フィールドにメモリを割り当てます。一部の Java 仮想マシンでは、この段階で、仮想メソッドの動的バインディングを実装するために使用されるメソッド テーブルなど、クラス階層に関連する他のデータ構造も構築されます。 分析: クラス ファイルが仮想マシンにロードされる前は、クラスはメンバー変数とメンバー メソッドのアドレスを認識していないため、コンパイラはシンボリック参照を生成します。このシンボリック参照には、クラス名、ターゲット メソッド名、受信したパラメーターの型、および戻り値の型が含まれます。解決とは、この記号参照を実際の参照に変換するプロセスです。シンボリック参照によって指されるクラスがロードされていない場合、このクラスのロードはトリガーされますが、リンクおよび初期化は行われません。 Java 仮想マシン仕様では、解析を完了するためにリンク プロセスは必要ありません。一部のバイトコードがシンボリック参照を使用する場合、これらのバイトコードを実行する前に解析を完了する必要があります。 初期化 初期化は静的フィールドを初期化することです。静的フィールドが final によって変更された場合、フィールドは定数値としてマークされ、その初期化は Java 仮想マシンによって直接完了します。 Javaコンパイラは、静的フィールドを初期化する残りのコードを、 初期化とは、定数値を直接割り当てて実行することです。 では、初期化はいつトリガーされるのでしょうか。 1. 仮想マシンが起動したら、ユーザーが指定したクラスを初期化します。 2. 新しいターゲット クラス インスタンスを作成するための新しい命令に遭遇したら、新しい命令のターゲット クラスを初期化します。 3. 静的メソッドを呼び出す命令に遭遇したら、静的メソッドが配置されているクラスを初期化します。 4. ただし、静的フィールドにアクセスする命令に遭遇すると、静的フィールドが配置されているクラスが初期化されます。 5. サブクラスの初期化により、親クラスの初期化がトリガーされます。 6. インターフェースがデフォルト メソッドを定義している場合、そのインターフェースを直接または間接的に実装するクラスの初期化によって、インターフェースの初期化がトリガーされます。 7. リフレクション API を使用してクラスがリフレクション的に呼び出されると、クラスが初期化されます。 8. MethodHandle インスタンスが初めて呼び出されると、MethodHandle によって指されるメソッドのクラスが初期化されます。 |
<<: クラウド大手は AI 市場の残り 96% をどのように活用するのでしょうか?
>>: Project EVE はエッジコンピューティングへのクラウドネイティブアプローチを推進します
vandweb.com は 2001 年に設立された台湾のホスティング会社です。その事業内容には、仮...
セルフメディアは人々の個人的な価値を高めることができます。名声を求める人もいれば、利益を求める人もい...
まず、具体的な動作例としてステンレスベルトのケースを取り上げます。まず、ユーザー分析ウェブサイトを作...
原題:馬化騰氏はモバイルゲーム業界について最も楽観的であると述べ、テンセントと運営会社との関係を説明...
米国の VPS 市場は 2018 年も依然として最もホットです。多くの企業が米国の VPS に無制限...
[[258793]]まず、JVM がクラスをロードする一般的なプロセスは、次の 3 つのステップに分...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス今年は企業、特に中小企業...
新年がゆっくりと過ぎ、私たちは通常の軌道に戻りました。自宅で休暇を取っている間、私はSEO業界につい...
一方で、百度は積極的に新しい百度最適化ガイドを編纂しており、他方では、百度は自社製品の脱SEO化を強...
Dangdang.com(微博)の創設者兼CEO、李国清(写真提供:テンセントテクノロジー)テンセン...
dmit 香港データセンターは、CN2 GT 回線と、中国聯通および中国移動の香港 PCCW への直...
エッジ コンピューティングは、エンタープライズ アプリケーションをデータ ソースに近づける分散コンピ...
はじめに:上海天極科技有限公司は、設立から 10 年を経て、多くの企業に高品質の IT サービスを提...
情報化時代におけるデータの急速な増加は、マーケティング担当者にとって困難な状況を生み出しています。数...
「ビジネス」という言葉は、産業用インターネットでは異なる意味を持つようです。説明しなくても、人々が自...