クラスロードメカニズムには、ロード、リンク、初期化の 3 つのステップが含まれます。ロード: クラス ファイルのバイナリ データをメモリに読み取り、バイトコード記述オブジェクトを作成します。リンク: バイトコード記述オブジェクトを検証、準備、解析し、それらを他のクラスに関連付けます。初期化: 静的初期化プログラムを実行し、静的変数を割り当て、継承関係を確立します。クラスが参照されなくなると、JVM は到達可能性分析を実行してクラスをリサイクル可能としてマークし、ガベージ コレクターはマークされたクラスのメモリを再利用しますが、静的変数はメモリ内に残ります。
前書き
Java 開発をマスターするには、Java 仮想マシン (JVM) のクラスロードメカニズムを理解することが重要です。この記事では、JVM がクラスをロード、リンク、アンロードする方法を詳しく説明し、実際の例を通じてこのメカニズムを説明します。
クラスロードプロセス
クラスロードプロセスには、次の3つのステップが含まれます:
クラスのアンロードプロセス
クラスが参照されなくなった場合、JVMは次の手順を実行してクラスをアンロードします:
実際のケース
サンプルコード:
public class MyClass { private static int staticVar = 10; private int instanceVar = 20; public static void main(String[] args) { MyClass obj = new MyClass(); System.out.println(staticVar); // 输出 10 System.out.println(obj.instanceVar); // 输出 20 } }
クラスロード分析:
MyClass
がインスタンス化されると、そのクラスファイルがメモリにロードされ、バイトコード記述オブジェクトを作成します。 MyClass
被实例化时,它的 class 文件被加载到内存,创建字节码描述对象。System
类。staticVar
被赋值为 10,类与其子类建立继承关系。类卸载分析:
当 obj
变量超出作用域并被垃圾回收后:
MyClass
对象被标记为可回收,因为 artık不再引用。MyClass
对象的内存空间。staticVar
System
クラスに関連付けられます。 🎜🎜🎜初期化: 🎜静的変数 staticVar
には値 10 が割り当てられ、クラスはそのサブクラスとの継承関係を確立します。 🎜🎜🎜🎜クラスのアンロード分析: 🎜🎜🎜obj
変数がスコープ外になりガベージコレクションされる場合: 🎜🎜🎜🎜リサイクル可能としてマーク: 🎜MyClass
オブジェクトはartık は参照されなくなったため、リサイクル可能としてマークされています。 🎜🎜🎜ガベージ コレクション: 🎜 ガベージ コレクターは、MyClass
オブジェクトのメモリ領域を再利用します。 🎜🎜🎜静的変数の保持: 🎜 クラスがアンロードされても、静的変数 staticVar
はクラス ローダーによって保持されるため、メモリ内に残ります。 🎜🎜以上がJVM クラスのロードメカニズムの詳細な説明: ロードからアンロードまでの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。