2011-09-20 79 views
5

我正在尋找一個簡單的場景,可以要求創建自定義類加載器嗎?可能需要自定義類加載器的情形?

除此之外,只是想確認引導程序和應用程序類加載器是否在內部擴展了java.lang.ClassLoader?

+0

那麼,像tomcat這樣的Java應用服務器可能需要一個自定義的類加載器,例如爲每個應用程序提供它自己的加載類的「快照」。 –

回答

9

簡而言之,它可用於添加新代碼或實時更改現有代碼。以下是這個URL更詳細的解釋。

爲什麼寫一個自定義類加載器?

對於希望創建一個自定義類加載器的三個主要原因是:

  • 要允許類加載來自其他存儲庫。

    這是最常見的情況,應用程序開發人員可能希望從其他位置(例如通過網絡連接)加載類。

  • 分割用戶代碼。

    這種情況不常被應用程序開發人員使用,但廣泛用於servlet引擎。

  • 允許卸載類。

    如果應用程序創建大量僅用於有限時間段的類,此例很有用。由於類加載器會維護已加載的類的緩存,因此只有在類加載器本身已被取消引用之後才能卸載這些類。出於這個原因,系統和擴展類永遠不會被卸載,但是當它們的類加載器時,應用程序類可以被卸載。

+0

謝謝RHT。正如你所說的,「應用程序類可以在他們的類加載器被卸載。」應用程序類加載器是否隨時在app/web服務器中卸載?根據我的理解,當我們關閉應用程序/ Web服務器時,它們也會卸載。右?不確定擴展類是什麼意思? –

+0

嗨,薩克。首先,我對遲到的迴應表示歉意。今天我回到了StackOverflow,尋找自己對這個問題的迴應,並且我注意到了你的評論。 – RHT

+0

你的問題 - 什麼是系統/擴展類應該是一個關於StackOverflow的單獨的頂級問題,它值得一個詳細的響應,但總之 - Application Server本身就是一個Java應用程序,它位於JVM之上,因此它擁有它自己的它需要使用的系統類或者可能跨不同應用程序共享的庫。各個供應商的術語各不相同,但這些類不會隨應用程序一起卸載。 – RHT

相關問題