亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用java卸載類?

用java卸載類?

素胚勾勒不出你 2019-06-17 17:06:04
我有一個自定義的類加載器,這樣桌面應用程序就可以從我需要交談的AppServer動態開始加載類。我們這樣做是因為需要這么做的罐子數量是荒謬的(如果我們想要運送它們的話)。如果不在運行時從AppServer庫動態加載類,則還會出現版本問題?,F在,我遇到了一個問題,我需要與兩個不同的AppServers交談,發現根據我首先加載的類,我可能會嚴重崩潰…是否有任何方法可以強制類的卸載而不實際殺死JVM?希望這是有意義的用java卸載類?
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

可以卸載類的唯一方法是使用的類加載器是垃圾收集。這意味著,對每個類和類加載器本身的引用都需要遵循dodo的方式。

解決問題的一個可能的解決方案是為每個JAR文件配備一個ClassLoader,為每個AppServers配置一個ClassLoader,將類的實際加載委托給特定的Jar類加載器。這樣,您就可以為每個App服務器指向不同版本的JAR文件。

不過,這并不是小事一樁。OSGi平臺正努力做到這一點,因為每個包都有不同的類加載器,并且依賴項由平臺解決。也許一個好的解決辦法就是看看它。

如果您不想使用OSGI,一種可能的實現是使用JarClassLoader為每個JAR文件初始化。

并創建一個新的多類加載器類,該類擴展了ClassLoader。這個類在內部有一個JarClassloaders的數組(或列表),在fineClass()方法中,將遍歷所有內部類加載器,直到找到定義或拋出NoClassDefFoundException為止??梢蕴峁讉€訪問器方法來向類中添加新的JarClassloader。對于MultiClassLoader,在網絡上有幾種可能的實現,因此您甚至可能不需要編寫自己的實現。

如果為到服務器的每個連接實例化MultiClassLoader,原則上每個服務器都可能使用同一類的不同版本。

我在一個項目中使用了MultiClassLoader的思想,其中包含用戶定義腳本的類必須從內存中加載和卸載,并且運行得很好。


查看完整回答
反對 回復 2019-06-17
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

我編寫了一個自定義的類加載器,可以在不使用GCing類加載器的情況下卸載各個類。JAR類裝載機


查看完整回答
反對 回復 2019-06-17
  • 3 回答
  • 0 關注
  • 999 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號