Java 2 クラスローダの参考文献

//www-6.ibm.com/jp/developerworks/java/030704/j_j-dyn0429.html">Javaプログラミングのダイナミックス 第1回:クラスとクラスのロード処理: VMの動きの概要をやさしく説明しています。クラスローダは名前空間としての働きをしますので、同じクラスファイルを別々のクラスローダでロードするとVM内では別々のクラスとして扱われます。
//citeseer.nj.nec.com/cache/papers/cs/16099/http:zSzzSzjava.sun.comzSzpeoplezSzgbrachazSzclassloaders.pdf/liang98dynamic.pdf">Dynamic Class Loading in the Java Virtual Machine: Java 1.xのころはクラスローダの設計上の不備が指摘されていました。この問題を解決するため、Java 2のクラスローダはクラスのロード時に関連するクラス間の制約の検査を行います(代入、引数、戻り値の型など)。同じクラス名でもクラスローダの異なるものは互換性が無いものとしてVMが例外をスローします。*1
//www-106.ibm.com/developerworks/edu/j-dw-javaclass-i.html">Tutorial: Understanding the Java ClassLoader: クラスローダのチュートリアルです。珍しいですね。Java 2でのクラスローダの変更点をまとめています。Javaソースコードをロードしてコンパイルをするクラスローダのサンプルもあります。このようにクラスローダにはいろいろな仕掛けを埋め込むことができます。セキュリティやAOPは典型的な例です。

*1:JBoss 3.0.5以前のUnifiedClassLoaderのバグは、この制約を考慮していなかったためにおこったものです。EARなどのアーカイブに含まれるjarをすべて別個のクラスローダにしてしまったので、Package Privateなクラスが別々のjarに含まれていると例外になってしまっていたのでした。