java classloader理解(似乎不正確)

引用:

http://frankkieviet.blogspot.in/2009/03/javalanglinkageerror-loader-constraint.html


結論:

1.類中的所有其他類型都由該類的classloader加載

2.jvm執行字節碼,如下:

40: invokestatic  #14                 // Method com/stc/Demo$LoginEJB.login:(Lcom/stc/Demo$User;)V

這是一個method descriptor。這個descriptor中使用的每一個類型被相應的classloader加載(但是不一定在調用時一定加載,如果傳遞參數null,那個該類型可能不被加載。),如下例:

com/stc/Demo$LoginEJB - 調用這個方法的類的classloader(called CL1)

Lcom/stc/Demo$User; - 實際加載User的classloader(由CL1委託加載,called CL2)

那麼,CL1不能在加載User,CL2不能再加載LoginEJB。(CL2能否加載LoginEJB沒有實際測試過。


但是這個method descriptor可以被整個classloader替換,如下:

com/stc/Demo$LoginEJB - 調用這個方法的類的classloader(called CL3)

Lcom/stc/Demo$User; - 實際加載User的classloader(由CL1委託加載,called CL4)

仍然,CL3不能在加載User,CL4不能再加載LoginEJB。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章