我的最終目標是能夠在它們已經加載到JVM之後重新加載類。卸載類加載器
閱讀以下答案Unloading classes in java?後,我一直在嘗試實現我自己的類加載器,它自己爲它加載的每個類創建不同的類加載器實例(它自己的類型相同)。
所以,每個Class-Loader的結果是一個類。
其目的是爲了能夠GC類,即它的所有實例,然後卸載它的類加載器,並能夠從它的字節重新加載相同的類。
問題是 - 我可以看到我的類實例被垃圾收集使用finalize()方法,但我不能讓我的類加載器卸載,或垃圾收集。
是否有任何代碼示例,一個簡單的測試,顯示它可以如何完成?
感謝,任何幫助,將不勝感激
編輯:
更清晰,我感興趣的代碼示例,其中新對象的實例化是通過「新的()」操作數,並且類加載器沒有顯式地重載主類中的類,但是在下一個'new()'被調用之後。
當你通過自定義的'ClassLoader'加載一個類時,你會得到一個'Class'對象。用這個'new'運算符是不可能的。使用'new'意味着你的代碼已經與'new'使用的類相關聯,因此,當你的包含'new'表達式的代碼仍然處於活動狀態時,該類不會被垃圾收集。此時你必須使用反射,例如在'Class'上調用'newInstance()'。當然,動態加載的代碼本身可以使用'new'來在它自己的範圍內實例化類。 – Holger 2018-01-25 09:33:39