javaでは、すべてのクラスがクラスローダーによってロードされていると言われています。Java Bootstrap Classloaderはどのようにロードされていますか?
まず、ブートストラップクラスローダーはすべてのrt.jarクラスをロードします。
クラスローダは、クラスであるように、私は誰が このBootStrapClassloaderをロードします、まだ混乱しています。
親切に説明してください。
javaでは、すべてのクラスがクラスローダーによってロードされていると言われています。Java Bootstrap Classloaderはどのようにロードされていますか?
まず、ブートストラップクラスローダーはすべてのrt.jarクラスをロードします。
クラスローダは、クラスであるように、私は誰が このBootStrapClassloaderをロードします、まだ混乱しています。
親切に説明してください。
ブートストラップクラスローダーは、クラスローダーであり、実際にはJVMコアの一部であり、ネイティブコードで記述されています。
クラスローダーはオブジェクトでもよく、表現も必要です。実際には、これによってユーザー定義のクラスローダーも作成できます。
英語でイディオムがあります。「彼は自分のブートストラップで自分を引き上げました」ブーツのストラップはブーツの上部の小さなハンドルですが、もちろん不可能です。
http://en.wikipedia.org/wiki/Booting
記事は、ブートストラップのために短いコンピュータを起動するプロセスを説明します。
あらゆるタイプのすべてのプログラムで何が起こるかは、ある種のローダーがあるバイトをどこかのメモリにコピーして、それらのバイト内の所定の場所で実行を開始するということです。
Javaの場合、ブートストラップローダーはJavaクラスであってもなくてもかまいません。しかし誰かが知っている人がいるかもしれません。しかし、最初のいくつかのクラスをメモリにロードして、JVMがロードされたJavaコードのビットを実行し始めるようなプログラムです。たぶん、JVMコードそのものをロードするかもしれません。たぶん、コードのいくつかのビットがJVMにロードされているかどうかを確認するだけかもしれません。たぶん、JVMがすでにロードされ実行されている必要があります。
そのプロセスの一部です。
2セント:1)思い出してくれてありがとう、私はちょうどupvoted。 2)この答えの前半は良いです。後半は不確実性でいっぱいです。私はそれにmuビットを追加しましたが、誰かが適切であるとは考えていませんでした。 –
あなたは完全な答えを探している場合は、以下の私の答えをお読みください。 (私はトランペットを吹いているわけではありませんが、すべての回答があります) –
@RaúlJavaを立ち上げる各ステップでどのようなコードがコードをロードしているかは問題ではありません。言うまでもなく、各OS上では、実行を開始するネイティブコードでなければなりません。 OSはネイティブコードのみを読み込みます。それは大きなものを積み込む小さなものをもたらします。プロセスは、各オブジェクトがロードされるまで繰り返され、順番に、すべてのオブジェクトがそこまでロードされます。最初の部分が小さくなればなるほど、OSごとにネイティブコードが少なくなり、すべてのOSに共通のコードが必要になります。しかし、ロードする段階の数は関係ありません。 –
回答::JVMが起動すると、システムクラスローダーをロードする特別なチャンクのマシンコードが実行されます。このマシンコードは、ブートストラップ/元来(時には - ヌル)クラスローダーと呼ばれます。
他のすべてのクラスローダーと同様、Javaクラスではありません。ブートストラップクラスローダは、プラットフォーム固有の機械命令であり、クラスローディングプロセス全体を開始します。
ブートストラップクラスローダーを除くすべてのクラスローダーは、Javaクラスとして実装されています。プロセスを開始するためには、最初のJavaクラスローダーをロードする必要があります。最初の純粋なJavaクラスローダーをロードすることは、ブートストラップクラスローダーの仕事です。
ブートストラップクラスローダーは、java.utilおよびjava.langパッケージのクラスを含め、基本Javaランタイム環境(JRE)をサポートするために必要なすべてのコードのロードも処理します。
すべてのクラスローダーがJavaクラスでないと言っているかどうかは分かりません。多分あなたはすべてのクラスローダーがJavaクラスであると言っています。コンマを使用すると、あいまいになります。 (これは第2段落の最初の文にあります) –
Java環境では、ブートストラップCLだけが非Java(ネイティブ)クラスローダーになります。それらの残りの部分(システム、アプリケーション、ユーザー定義のCLなど)はJavaクラスローダーです............. plsはリンクを参照してください。 –
JDKインストールパス:jdk\jre\lib\rt.jar
この場所は、ブートストラップクラスパスと呼ばれています。ブートストラップクラスローダは、ブートストラップクラスパスからクラスをロードする責任があります。
ブートストラップクラスローダーは、デフォルトでJVMで使用できます。これはCやC++のようなネイティブ言語で実装されています。
ブートストラップクラスローダーは、/ jre/libディレクトリにあるコアJavaライブラリをロードします。このクラスローダは、コアJVMの一部であり、ネイティブコードで記述されています。
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
参照 - http://www.javabench.in/2012/02/java-class -loading.html –
rt、jarの多くのクラスはブートストラップクラスローダーによって読み込まれますが、すべてではありません。 "java -verbose:class HelloWorld"のような-verbose:class引数を持つ単純なプログラムを実行するだけで確認できます。ロードされたすべてのクラスにJVMが渡されます。 rt.jarの各クラスがJVMによってロードされていないことがわかります。 – hsingh