java classloader是否可以不止一次加載一個類,即加載類的新版本,而不會拋出「重複類定義」的LinkageError?java classloader是否可以多次加載一個類
換句話說,如果我們需要動態地重新加載一個類,可以用同一個類加載器來完成,還是必須首先銷燬類加載器,然後創建一個新類來加載新版本的類?
java classloader是否可以不止一次加載一個類,即加載類的新版本,而不會拋出「重複類定義」的LinkageError?java classloader是否可以多次加載一個類
換句話說,如果我們需要動態地重新加載一個類,可以用同一個類加載器來完成,還是必須首先銷燬類加載器,然後創建一個新類來加載新版本的類?
一個類加載器只能實際加載一次類!這意味着它只能定義一次。它可以加載多次,但只是第一次定義它。剩下的時間將加載它已經從第一次定義的現有實例。
試圖定義一個類兩次導致LinkageError
「重複的類定義」。如果需要多次加載和重新加載類,那麼這必須由不同的類加載器完成,如下所示:
創建一個自己的類加載器,用於加載類。當你想重新加載任何類時,你必須銷燬你的類加載器,然後創建一個新的實例來加載你的類的新版本。
當然,這會導致額外的負載,但是如果您需要它,那也沒關係。
另外,請注意在銷燬類加載器的舊實例時不要留下任何類的引用,因爲這會導致內存泄漏!
重新加載類的原因是類中的變化。在這個空間熱點自動關心班的重裝。所以你不必關心這個。我希望這有幫助。
問題是否可以通過同一個類加載器完成重新加載! – 2011-12-14 11:44:03
也許你需要[OSGI](http://en.wikipedia.org/wiki/OSGi) – stivlo 2011-12-14 11:33:53
這個問題的接受答案是相當有幫助的:http://stackoverflow.com/questions/148681/unloading-classes -in-java – laher 2011-12-14 11:35:34