Java的動態載入機制分析和應用

2021-08-30 01:25:25 字數 932 閱讀 7070

要弄清楚動態載入(熱部署),首先要明白以下幾點:

(1)乙個classloader例項只能對乙個類載入一次。

(2)通過defineclass方法,可以動態載入類檔案的byte陣列到classloader例項中

(3)classloader的loadclass方法載入類的順序是:先用bootstrap classloader載入類,如果載入不到,則用extclassloader載入類,最後用system classloader載入類

(4)假設某個自定義的customclassloader用defineclass載入類,並且customclassloader並沒有覆蓋loadclass方法。customclassloader載入乙個實現了介面ia的類a,那麼defineclass會呼叫父類的loadclass,載入介面ia到system classloader中。然而a被載入到了customclassloader的例項中。

基於以上前提,若想達到對類a的熱部署,不需要覆蓋loadclass方法,讓system classloader載入介面,所以在由system classloader載入的類中(也就是面向開發人員的**中)可以通過型別轉換ia a=(ia)clazz.newinstance(); 來訪問動態載入的a的例項。但是因為每個classloader例項只能對類載入一次,所以每次動態載入的時候,都需要建立乙個classloader例項來載入實現。

在實際應用中還要考慮動態載入點,也就是說什麼時候對那些需要熱部署的類進行動態載入。在網路應用中,如果要對某個長鏈結進行自定義處理,那麼可以在鏈結建立的時候動態載入類。對於短鏈結的話,可以通過jmx手動動態更新類。也可以通過某個定時器來動態載入。

用動態載入的觀點來看遠端過程呼叫,就是說本地儲存遠端的介面,該介面是由本地的system classloader載入進來的,實現類通過byte流傳過來,然後用特定的classloader例項來載入該實現類。因此實現了遠端過程呼叫。

Python的動態載入機制

1 python所有的模組載入到記憶體後,都會放在sys.modules中。當我們在乙個檔案中import乙個模組的時候,python會先去sys.modules中查詢是否已經載入過這個模組,如果是,則將這個模組的名字加入到正在呼叫import的local命名空間中 如果沒有載入過這個模組,則從sy...

Java反射機制總結學習 動態載入類

首先有如下 public class dynamicloadclass else if b equals args 0 class a class b 上面 可以正常編譯 執行。但是如果此時沒有b類,而且,我們的需求也不需要b類,就只用a類的方法就可以了,這個時候我們就需要main函式的 然後重新編...

java的類載入機制

class testclassacatch exception e class c urlcl.loadclass testclassa testclassa object testclassa c.newinstance object.method catch exception e e.prin...