java findLoadedClass實踐

該方法官方文檔的解釋:

Returns the class with the given binary name if this loader has been recorded by the Java virtual machine as an initiating loader of a class with that binary name.

經過實踐,結論如下:

1.主動調用ClassLoader的loadClass加載一個類,但該ClassLoader並不是被加載類的定義類加載器,那麼後面該ClassLoader的findLoadedClass方法總是回返回null;如果該ClassLoader是被加載類的定義類加載器,則findLoadedClass會返回對應的Class;

2.如果是JVM自己根據類加載機制加載的Class,那麼被加載類的初始類加載器(initiating loader)和被加載類的定義類加載器(defining loader),它們的findLoadedClass均會返回被加載的Class;

 

思考

根據官方文檔的說明,如果是初始類加載器,按說findLoadedClass都會返回對應的Class,但根據結論1其並未返回,所以我猜測在主動調用加載Class情況下,並沒有標記對應的初始類加載器;

調用loadClass的加載器和定義類加載器之間,如果還有別的類加載器,它們都不會被標記爲被加載類的初始類加載器,它們的findLoadedClass都會返回null;

 

具體參考https://stackoverflow.com/questions/21962631/findloadedclass-returns-null

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