Java程序運(yùn)行的過程是這樣的:
類加載器(class loader)加載程序運(yùn)行所需要的所有類,它通過區(qū)分本機(jī)文件系統(tǒng)的類和網(wǎng)絡(luò)系統(tǒng)導(dǎo)入的類增加安全性,這可以限制任何的特洛伊木馬程序,因?yàn)楸緳C(jī)類總是先被加載,一旦所有的類被加載完,執(zhí)行文件的內(nèi)存劃分就固定了,在這個(gè)時(shí)候特定的內(nèi)存地址被分配給對(duì)應(yīng)的符號(hào)引用,查找表(lookuo table)也被建立,由于內(nèi)存劃分發(fā)生在運(yùn)行時(shí),解釋器在受限制的代碼區(qū)增加保護(hù)防止未授權(quán)的訪問;然后字節(jié)碼校驗(yàn)器(byte code verifier)進(jìn)行校驗(yàn),主要執(zhí)行下面的檢查:類符合JVM規(guī)范的類文件格式,沒有違反訪問限制,代碼沒有造成堆棧的上溢或者下溢,所有操作代碼的參數(shù)類型都是正確的,沒有非法的數(shù)據(jù)類型轉(zhuǎn)換(例如將整型數(shù)轉(zhuǎn)換成對(duì)象類型)發(fā)生;校驗(yàn)通過的字節(jié)碼被解釋器(interpreter)執(zhí)行,解釋器在必要時(shí)通過運(yùn)行時(shí)系統(tǒng)執(zhí)行對(duì)底層硬件的合適調(diào)用。后三個(gè)答案是SL275中的原話