簡體   English   中英

為什么java ClassLoader中沒有unloadClass(String name)方法

[英]Why is there no unloadClass(String name) method in java ClassLoader

作為menthioned 這個職位 ,當他們的ClassLoader是垃圾收集類將被上傳和OSGI用它來實現熱depoly。
但是為什么JDK不提供unloadClass(String name)方法來幫助我們刪除一個sepecify類? 因為他們提供了loadClass(String name)
提供此功能有任何困難或副作用嗎?

但是為什么JDK不提供unloadClass(String name)方法來幫助我們刪除一個sepecify類? 因為他們提供了loadClass(String name)

加載類是一個非常常見的操作,幾乎總是需要在創建類加載器后(顯式或在后台)執行。 卸載類是一種非常專業的操作,只能在一小部分用例中看到好處,並且帶來復雜性和困難。

提供此功能有任何困難或副作用嗎?

當然,它類似於隨機刪除一個對象。 如果您已經加載了該類,那么它可能會被使用,並且它的實例可能正在您的程序中使用。 在卸載類時,您希望在這種情況下發生什么?

但是為什么JDK不提供unloadClass(String name)方法來幫助我們刪除一個sepecify類?

考慮到java的核心哲學之一,可以回答這個問題。 記住Java時,用戶不必處理內存管理。 當你說卸載類時,它實質上意味着你刪除對類的引用會釋放存儲與類相關的數據的方法區域/類區域的內存。

提供此功能有任何困難或副作用嗎?

最重要的副作用是用戶可能會干擾在所有線程中共享的方法區域,並且本身並不總是線程安全的。

有關jvm的更多詳細信息,請參閱以下鏈接:

http://blog.jamesdbloom.com/JVMInternals.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM