類加載
Java中的代碼都寫在類裏面,源代碼(.java文件)經過編譯後會變成字節碼(.class文件),當Java應用程序運行時,JVM會加載要用到的類。
負責類加載的是java.lang.ClassLoader的對象,ClassLoader的對象會根據類的binary name(不知道怎麼翻譯,二進制名?)來讀取類的字節碼,然後把這些字節碼加載到JVM的方法區裏,同時會在heap裏面創建一個Class對象,這個Class對象是類的元數據和它的對象通信的接口。類在heap中的Class對象和加載它的ClassLoader對象之間有強引用。
類卸載
不像類加載,Java中沒有提供顯式進行類卸載的API,但是如果加載類的ClassLoader對象被垃圾回收器回收的話,這個類就會被卸載。所以我們可以自己實現ClassLoader,自己加載類,然後對ClassLoader對象的引用賦值爲null,等ClassLoader對象剩下的引用數量爲0時會被回收,這樣就達到卸載類的目的了。