java程序的工作機制:Java對象都以單獨的class文件存在,java虛擬機將其載入并執行其虛擬機指令。
Java虛擬機查找這些java對象:
java虛擬機根據class path來查找java對象,而虛擬機的class path又分為三層:
bootstrap:sun.boot.class.path
extension: java.ext.dirs
application: java.class.path
三個class path各有對應的classloader。由上而下形成父子關系
當程序中調用new指令,或者ClassLoader.load方法時。其順序如下:
1. 首先查看application的classloader中是否已有對應的class緩存,假如有則返回,并根據class分配內存。假如沒有,接下一步。
2. 首先查看extension的classloader中是否已有對應的class緩存,假如有則返回,并根據class分配內存。假如沒有,接下一步。
3. 首先查看bootstrap的classloader中是否已有對應的class緩存,假如有則返回,并根據class分配內存。假如沒有,接下一步。
4. 由bootstrap的classloader在其class path中試圖加載該class,假如有,則將該class放入cache中,并返回。假如沒有,接下一步。
5. 由extension的classloader在其class path中試圖加載該class,假如有,則將該class放入cache中,并返回。假如沒有,接下一步。
6. 由application的classloader在其class path中試圖加載該class,假如有,則將該class放入cache中,并返回。假如沒有,則拋出ClassNotFound的exception。
Java虛擬機加載這些java對象:
新聞熱點
疑難解答