Index / Reload

Comment on java__class_unloading

java__class_unloading について、コメントがあればどうぞ!
E-mail アドレスは公開されません。URL は公開されます。
なお、管理者の判断により予告なくコメントを削除することがあります。 ご了承下さい。

パスワードを入力すると後からコメントの修正が可能です。

確認:下の Check の項目に xprXL0dW をコピーして入力してね。

お名前:
E-mail or URL:
Check: ← 上の方にある確認文字列を入力してね。
Password:
コメント:
* 管理人 2021-03-16 00:34:05 [Edit]

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」という特別なクラスローダ―が用意されているわけです。

* lulu 2021-03-10 14:39:49 [Edit]

大変参考になりました。ありがとうございます。
一点だけ、

「オブジェクト(java.lang.Object) がクラス(java.lang.Class) に所属するように」

ObjectがClassに属しているのでしょうか?私が知っている限りでは、ClassはJVMがクラスをロードするときにそのクラスのClassオブジェクトを生成している役割ですが・・

* 名無しさん 2012-04-13 11:22:40 [Edit]

非常にわかりやすく、理解できました。ありがとうございました!

* のり 2010-03-19 13:30:26 [Edit]

クラスローダーについて勉強になりました。

* Richard Stallman 2008-05-28 09:43:28 [Edit]

Java バンザイ!

* 名無しさん 2006-12-27 09:23:01 [Edit]

非常に興味深く読ませていただきました。
ありがとうございます!

* 名無しさん 2004-08-26 23:44:00 [Edit]

実は偶然通りがかったのですが、、、、、、
とても参考になります。今やってる仕事にも役に立ちそうです。
ありがとうございます。

Powered by くっつき BBS