Index
/
Reload
Edit on
java__class_unloading
このコメントを修正します。
内容を修正した後で投稿時のパスワードを入力してください。
現在、コメントを削除する機能がありません。
コメントを削除したい場合には、 コメント欄を空欄にしておいてください (管理人が後で削除します)。
お名前:
E-mail or URL:
Password:
コメント:
Javaの文法上のクラスはjava.lang.Classのオブジェクトと1対1に対応しているので、私は「文法上のクラス=java.lang.Classのインスタンス」と考えています。そう考えると異なるクラスローダ―上にある同名のクラスの扱いがうまく整理できるからです。 初期のJDK 1.0から7前後までJava VMのソースコードを読んでいましたが、java.lang.Object はその第1フィールドに「private Class _class」のようなフィールドを概念的に持っています。これは他の JVM でも同様だと思います。そしてオブジェクト(java.lang.Object)が生成される時に、_classフィールドに Class オブジェクトの参照が fill されるように動作します。 # Hotspot VM の実際の実装は _class に相当するフィールドはもっと複雑な構造をしていますが。 java.lang.Object → java.lang.Class → java.lang.ClassLoader という参照関係があり、オブジェクト指向で言うところの「A has B」という関係があるの「オブジェクトはクラスに所属し、クラスはクラスローダ―に所属する」と言えると考えています。 こう書くと java.lang.Object を継承しているはずの java.lang.Class や java.lang.ClassLoader は、そのオブジェクト生成時に Class も ClassLoader もないのにどうやって生成できるのか疑問に思われると思いますが、クラスファイルを読み込んで作られるのではなく JVM 起動時に自動生成されます。そういう点も踏まえて「Bootstrap Class Loader」という特別なクラスローダ―が用意されているわけです。
Powered by
くっつき BBS