クラスローディングが降順で起こっている間に、ClassLoaderのキャッシュが昇順でチェックされるのはなぜですか? ClassLoaderのキャッシュが昇順でチェックされているのはなぜですか?
答えて
JavaのClassLoaderは、委譲、可視性、一意性の3つの原則で動作します。委任原則クラスロードの要求を親クラスローダーに転送し、親クラスがクラスを見つけたりロードできなかった場合にのみクラスをロードします。可視性の原則により、子クラスローダーは親ClassLoaderによってロードされたすべてのクラスを参照できますが、親クラスローダーは子によってロードされたクラスを見ることができません。一意性の原則では、クラスを一度だけロードすることができます。これは、基本的に委譲によって実現され、子ClassLoaderがすでに親によってロードされたクラスをリロードしないようにします。言い換えれば
hereを説明した:Javaで
クラスローダはツリーに編成されています。リクエストによって、クラス ローダーは、クラスがすでにロードされているかどうかを、 が自身のキャッシュで調べます。クラスがキャッシュに存在する場合、 CLはクラスを返し、そうでなければ、要求を親に委譲します。 親が設定されていない(Nullである)か、クラスをロードできず、 がClassNotFoundExceptionをスローした場合、クラスローダーは クラス自体をロードしようとし、クラスファイルの独自のパスを検索します。クラス がロード可能な場合はそれが返され、そうでない場合はClassNotFoundException がスローされます。 キャッシュルックアップは、ツリールートに達するか、またはクラスがキャッシュ内に見つかるまで、子から の親に再帰的に行きます。 ルートに達すると、クラスローダはクラスをロードしようとし、 は親から子への再帰を展開します。
- キャッシュ
- 親
- 自己
このメカニズムは、クラスがに最も近いクラスローダによってロードされる傾向があることを保証:我々は 次の順序を持っていることをまとめますルート。
これは純粋に効率の問題です。キャッシュを忘れてしまった場合、クラスロードの順序では、Javaシステムクラスが常にアプリケーションクラスより優先され、クラスはチェーン内の1つのクラスローダーによってのみロードできることが保証されます。したがって、複数のキャッシュにあるクラスがないため、キャッシュを検索する順序で機能的な違いはありません。
つまり、拡張クラスローダーキャッシュとそれに続くシステムクラスローダーキャッシュを検索してから、クラスをロードしようとすると、結果がまったく同じになります。これを行うには、ロードされたクラスを検索するために余分なAPIが必要になり、キャッシュの検索が非常に迅速な操作であるため、ほとんど効果がありません。
クラスは複数のクラスローダーによってロードできますが、ローダー→親チェーン内にあるクラスではないことに注意してください。
- 1. 配列が昇順であるか昇順でないかの配列
- 2. ラジオボタンがチェックされていないのはなぜですか?
- 3. java-recursion code explanation(昇順でチェックする)
- 4. なぜラジオボタンがチェックされていないのですか?
- 5. カードのグレープ昇順。それはなぜ機能するのですか?
- 6. Javaでは、なぜ2つのタイプの例外がチェックされ、チェックされていないのですか?
- 7. キャッシュがフラッシュされています、なぜですか?
- 8. キャッシュされないのはなぜですか?
- 9. なぜdrf-extensions CacheResponseMixinキャッシュがキャッシュされていませんか?
- 10. Touchイベントの横にマウスイベントが昇格されるのはなぜですか?
- 11. なぜアンドロイドWebviewはデフォルトでキャッシュをチェックしないのですか?
- 12. パイゲームでスコアが急上昇するのはなぜですか?
- 13. このコマンドでアルファベット順が指定されないのはなぜですか?
- 14. 私のtastypieキャッシュが呼び出されないのはなぜですか?
- 15. J2MEでチェックボックスがチェックされているかチェックされていないかをチェックする方法は?
- 16. 配列がアルファベット順でソートされないのはなぜですか?
- 17. 画像がAlamofireImageにキャッシュされないのはなぜですか?
- 18. チェックされていない状態が保存されないのはなぜですか?
- 19. 私の最初のラジオボタンがチェックされないのはなぜですか?
- 20. 例外クラスが子クラスとしてチェックされるのはなぜですか?JavaではRuntimeExceptionのチェックが外されていますか?
- 21. なぜSpring MVCでhttpキャッシュ制御がサポートされないのですか?
- 22. なぜPythonマルチプロセッシングが順番に実行されているのですか?
- 23. TypeScript型の算術演算がチェックされないのはなぜですか?
- 24. 順序は適切ではない理由(昇順)
- 25. システムフォント "Hiragino Sans"はクリッパーされた昇順と降順で表示されます
- 26. ソートアルゴリズムで「昇順」ではなく「降順でない」という用語を使用するのはなぜですか?
- 27. Clojureはチェックされていない例外を含むチェック例外をなぜラップするのですか?
- 28. 私のアプリのすべてのRazor Viewsがキャッシュされているのはなぜですか?
- 29. 私のプライベートコンストラクタは、リフレクションでチェックされているときに公開されるのはなぜですか?
- 30. TreeMapキーが昇順に表示されない