Java最大的優(yōu)勢(shì)在于它的虛擬機(jī)機(jī)制和垃圾回收機(jī)制。今天先談Java虛擬機(jī)機(jī)制。
 
  Java虛擬機(jī)(Java Virtual Machine) 簡(jiǎn)稱JVM Java虛擬機(jī)是一個(gè)想象中的機(jī)器,在實(shí)際的計(jì)算機(jī)上通過(guò)軟件模擬來(lái)實(shí)現(xiàn)。Java虛擬機(jī)有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java虛擬機(jī)有五部分構(gòu)成:一組指令集,一組寄存器,一個(gè)棧,一個(gè)無(wú)用單元收集堆,一個(gè)方法區(qū)域。這五個(gè)部分是虛擬機(jī)的邏輯成分,但他們必須在真是機(jī)器上以某種方式實(shí)現(xiàn)。
 
  Java虛擬機(jī)機(jī)制的存在可以使java語(yǔ)言在不同平臺(tái)上運(yùn)行時(shí)而不需要再重新編譯。Java虛擬機(jī)屏蔽了與具體平臺(tái)無(wú)關(guān)的信息,使得Java語(yǔ)言編譯程序只需要生成在Java虛擬機(jī)上運(yùn)行的字節(jié)碼,就可以在多種平臺(tái)上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。
 
 
 
 
  Java程序先經(jīng)過(guò)編寫(xiě)生成.java源程序,然后經(jīng)過(guò)Java編譯器編譯生成.class字節(jié)碼,這時(shí)運(yùn)行虛擬機(jī),虛擬機(jī)會(huì)啟動(dòng)類加載器,然后類加載器會(huì)找到APT中相對(duì)應(yīng)的類進(jìn)行加載,進(jìn)行匹配后,再進(jìn)行字節(jié)碼校驗(yàn),解釋器進(jìn)行解釋,最后交給操作系統(tǒng)控制硬件執(zhí)行。或者通過(guò)JIT(just in time)編譯器將.class文件快速交給操作系統(tǒng)控制硬件執(zhí)行。需要注意的是:解釋器是每執(zhí)行一行就解釋一行,而JIT則是將整個(gè)代碼一次性翻譯完,然后一次性運(yùn)行。因此JIT編譯器的運(yùn)行效率要比解釋器更高。