Javaクラスローダー
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/25 00:16 UTC 版)
クラスロードのプロセス
各Javaクラスは、クラスローダーによってロードされなければならない[2]。さらに、Javaプログラムは外部ライブラリ(つまり、プログラムの作者とは別の誰かが開発し提供するライブラリ)を利用する可能性もあり、また、それ自身が複数のライブラリで構成されている場合もある。
JVMが開始されると、3つのクラスローダーが使用される[要検証 ][3][4]:
- ブートストラップクラスローダー (bootstrap class loader)
- 拡張クラスローダー (extension class loader)
- システムクラスローダー (system class loader)
ブートストラップクラスローダーは、中核のJavaライブラリを <JAVA_HOME>/lib
ディレクトリからロードする[注釈 1]。このクラスローダーはJavaVMの中心部分であり、ネイティブコードで記述されている。
拡張クラスローダーは、拡張ディレクトリ (<JAVA_HOME>/lib/ext
や、java.ext.dirs
プロパティで指定された他のディレクトリ) にあるコードをロードする。これは、sun.misc.Launcher$ExtClassLoader
クラスで実装されている。
システムクラスローダーは、java.class.path
、すなわちシステム環境変数 CLASSPATH
にあるクラスをロードする。こちらは、sun.misc.Launcher$AppClassLoader
クラスで実装されている。
注釈
- ^ core.jar、server.jar、rt.jarなどのJARファイルに格納されている。
出典
- ^ Binildas, Mcmanis (1996年1月10日). “The basics of Java class loaders”. JavaWorld. 2008年1月26日閲覧。[リンク切れ]
- ^ a b Binildas, Christudas (2005年1月26日). “Internals of Java Class Loading”. onjava.com. 2009年10月2日閲覧。[リンク切れ]
- ^ “Understanding Extension Class Loading”. java.sun.com (2008年2月14日). 2008年1月26日閲覧。
- ^ Dennis, Sosnoski (2003年4月29日). “Classes and class loading”. ibm.com. 2008年1月26日閲覧。[リンク切れ]
- ^ Vladimir, Roubtsov (2003年9月5日). “Cracking Java byte-code encryption”. javaworld.com. 2008年1月26日閲覧。[リンク切れ]
- ^ Tim, deBoer (2002年8月21日). “J2EE Class Loading Demystified”. ibm.com. 2008年1月26日閲覧。[リンク切れ]
- ^ http://incubator.apache.org/depot/version/jar-hell.html[リンク切れ]
- ^ クラスローダーとJ2EEパッケージング戦略を理解する: 第2回「クラスローダーを理解する - シングルトンがシングルトンでなくなる日」| IBM, Internet Archive
- ^ JSR 277論争、バージョニングで再燃 | InfoQ
- ^ http://www.osgi.org/News/20081217[リンク切れ]
- ^ イマドキのJava徹底入門(4) Javaのモジュールシステムを理解しよう(その1) | TECH+
- ^ Bartlett, Neil; Hackbarth, Kai (2016年9月22日). “Java 9, OSGi and the Future of Modularity (Part 1)”. 2024年2月25日閲覧。
- Javaクラスローダーのページへのリンク