2013-08-13 8 views
26

javaでは、すべてのクラスがクラスローダーによってロードされていると言われています。Java Bootstrap Classloaderはどのようにロードされていますか?

まず、ブートストラップクラスローダーはすべてのrt.jarクラスをロードします。

クラスローダは、クラスであるように、私は誰が このBootStrapClassloaderをロードします、まだ混乱しています。

親切に説明してください。

+0

2つの詳細な回答(特にamicngh)http://stackoverflow.com/questions/11395074/who-load-the-java-system-classloaderを参照してください。またここに:http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/index.html – mins

+0

参照 - http://www.javabench.in/2012/02/java-class -loading.html –

+0

rt、jarの多くのクラスはブートストラップクラスローダーによって読み込まれますが、すべてではありません。 "java -verbose:class HelloWorld"のような-verbose:class引数を持つ単純なプログラムを実行するだけで確認できます。ロードされたすべてのクラスにJVMが渡されます。 rt.jarの各クラスがJVMによってロードされていないことがわかります。 – hsingh

答えて

8

ブートストラップクラスローダーは、クラスローダーであり、実際にはJVMコアの一部であり、ネイティブコードで記述されています。

クラスローダーはオブジェクトでもよく、表現も必要です。実際には、これによってユーザー定義のクラスローダーも作成できます。

3

英語でイディオムがあります。「彼は自分のブートストラップで自分を引き上げました」ブーツのストラップはブーツの上部の小さなハンドルですが、もちろん不可能です。

http://en.wikipedia.org/wiki/Booting

記事は、ブートストラップのために短いコンピュータを起動するプロセスを説明します。

あらゆるタイプのすべてのプログラムで何が起こるかは、ある種のローダーがあるバイトをどこかのメモリにコピーして、それらのバイト内の所定の場所で実行を開始するということです。

Javaの場合、ブートストラップローダーはJavaクラスであってもなくてもかまいません。しかし誰かが知っている人がいるかもしれません。しかし、最初のいくつかのクラスをメモリにロードして、JVMがロードされたJavaコードのビットを実行し始めるようなプログラムです。たぶん、JVMコードそのものをロードするかもしれません。たぶん、コードのいくつかのビットがJVMにロードされているかどうかを確認するだけかもしれません。たぶん、JVMがすでにロードされ実行されている必要があります。

そのプロセスの一部です。

+0

2セント:1)思い出してくれてありがとう、私はちょうどupvoted。 2)この答えの前半は良いです。後半は不確実性でいっぱいです。私はそれにmuビットを追加しましたが、誰かが適切であるとは考えていませんでした。 –

+0

あなたは完全な答えを探している場合は、以下の私の答えをお読みください。 (私はトランペットを吹いているわけではありませんが、すべての回答があります) –

+0

@RaúlJavaを立ち上げる各ステップでどのようなコードがコードをロードしているかは問題ではありません。言うまでもなく、各OS上では、実行を開始するネイティブコードでなければなりません。 OSはネイティブコードのみを読み込みます。それは大きなものを積み込む小さなものをもたらします。プロセスは、各オブジェクトがロードされるまで繰り返され、順番に、すべてのオブジェクトがそこまでロードされます。最初の部分が小さくなればなるほど、OSごとにネイティブコードが少なくなり、すべてのOSに共通のコードが必要になります。しかし、ロードする段階の数は関係ありません。 –

23

回答::JVMが起動すると、システムクラスローダーをロードする特別なチャンクのマシンコードが実行されます。このマシンコードは、ブートストラップ/元来(時には - ヌル)クラスローダーと呼ばれます。

他のすべてのクラスローダーと同様、Javaクラスではありません。ブートストラップクラスローダは、プラットフォーム固有の機械命令であり、クラスローディングプロセス全体を開始します。

ブートストラップクラスローダーを除くすべてのクラスローダーは、Javaクラスとして実装されています。プロセスを開始するためには、最初のJavaクラスローダーをロードする必要があります。最初の純粋なJavaクラスローダーをロードすることは、ブートストラップクラスローダーの仕事です。

ブートストラップクラスローダーは、java.utilおよびjava.langパッケージのクラスを含め、基本Javaランタイム環境(JRE)をサポートするために必要なすべてのコードのロードも処理します。

出典:http://www.theserverside.com/tutorial/Classloaders-Demystified-Understanding-How-Java-Classes-Get-Loaded-in-Web-Applications

+2

すべてのクラスローダーがJavaクラスでないと言っているかどうかは分かりません。多分あなたはすべてのクラスローダーがJavaクラスであると言っています。コンマを使用すると、あいまいになります。 (これは第2段落の最初の文にあります) –

+0

Java環境では、ブートストラップCLだけが非Java(ネイティブ)クラスローダーになります。それらの残りの部分(システム、アプリケーション、ユーザー定義のCLなど)はJavaクラスローダーです............. plsはリンクを参照してください。 –

-1

JDKインストールパス:jdk\jre\lib\rt.jar

この場所は、ブートストラップクラスパスと呼ばれています。ブートストラップクラスローダは、ブートストラップクラスパスからクラスをロードする責任があります。

ブートストラップクラスローダーは、デフォルトでJVMで使用できます。これはCやC++のようなネイティブ言語で実装されています。

-2

ブートストラップクラスローダーは、/ jre/libディレクトリにあるコアJavaライブラリをロードします。このクラスローダは、コアJVMの一部であり、ネイティブコードで記述されています。

関連する問題