java - 所有类都是由Object类的记载器加载的吗?
大家讲道理
大家讲道理 2017-04-18 10:48:25
0
3
635

看到网上这么说:

双亲委派机制描述
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

首先将加载任务委托给父类加载器,依次递归 这句话的意思是所有类都是由Object类的记载器加载的吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(3)
大家讲道理

Java 仮想マシンの最初のクラス ローダーはブートストラップです。このローダーは Java 仮想マシン カーネルにネストされており、C++ で書かれたバイナリ コードです。

委任メカニズムを使用すると、親クラスが再帰的に検索されます。つまり、ブートストラップを使用してロードを試行し、見つからない場合はダウンすることをお勧めします。バイトコードの 2 つのコピーがメモリ内に出現しないようにします。

クラスクラスローダーを誤解しています。

クラスが記録されるときは、まず現在のスレッドの

クラスローダーを使用して、スレッド内の最初のクラスをロードします。たとえば、このクラスは ClassA で、クラスローダーは ClassLoaderA です。

ClassA が ClassB を参照する場合、システムは ClassLoaderA を使用して ClassB をロードします。

現在 2 つのクラスがあります (

簡易版、実際には 2 つ以上のクラス)。

ClassX と ClassY がメモリにロードされており、両方とも ClassZ を参照している状況を考えます。では、誰が ClassZ をロードするのでしょうか。

明らかに、上記のロード手順によれば、ClassZ の 2 つのコピーが表示されます。ClassX は 1 回ロードされ、ClassY は再度ロードされます。 ClassY は ClassX がロードされたことを知らないためです。

この問題を解決するには、親クラスを再帰的に検索します。

具体的な手順は、まず BootstrapClassLoader から検索し、BootstrapClassLoader がこのクラスをロードしていない場合は、そのクラスを返します。このクラスが見つかるまで検索を続けます。このスレッドのクラス ローダーが見つからない場合は、クラスがロードされていないことを意味し、現在のスレッドのローダーを使用してクラスがロードされます。

を使用して、現在のスレッドのクラスローダーを取得できます。 getContextClassLoader()

いいねを押す +0
小葫芦

Java には、システム クラス ローダーとユーザー定義クラス ローダーの 2 種類のクラス ローダーがあります。

システム クラス ローダーには、JDK1.6 の ブートストラップ クラス ローダー など、
System.getProperty("sun.boot.class.path") code>クラスロードパスを取得できますBootstrap Class Loader在JDK1.6下,通过
System.getProperty("sun.boot.class.path")可以得到类加载路径

JAVA_HOME\jre6\lib\resources.jar;  
JAVA_HOME\Java\jre6\lib\rt.jar;  
JAVA_HOME\jre6\lib\sunrsasign.jar;  
JAVA_HOME\jre6\lib\jsse.jar;JAVA_HOME\jre6\lib\jce.jar;  
JAVA_HOME\jre6\lib\charsets.jar;  
JAVA_HOME\jre6\lib\modules\jdk.boot.jar;  
JAVA_HOME\jre6\classes 

这些路径下的class是由Bootstrap负责,其它路径下的class的递归到Bootstrap リーリー

これらのパスのクラスは Bootstrap によって処理され、他のパスのクラスが Bootstrap に再帰され、クラス ファイルが見つからない場合は、次のパスでロードされます。サーバーは、対応するパスに移動してロードします。 🎜
いいねを押す +0
迷茫

上記の人が言ったことは正しいので、JVM 関連の本を読んで詳しく学ぶことをお勧めします。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート