JVM
java虛擬機即JVM運行字節(jié)碼得虛擬機憋沿,JVM可以在不同得系統(tǒng)實現(xiàn),使用相同字節(jié)碼沪猴,運行都是相同得結果辐啄,即java得跨平臺得原理
字節(jié)碼
java中采章,JVM理解的代碼叫做字節(jié)碼,擴展名.class文件壶辜,只面向虛擬機悯舟,java語言通過字節(jié)碼的方式,解決傳統(tǒng)解釋型語言執(zhí)行效率低的問題砸民,保留解釋型語言的可移植性抵怎,所以java運行效率高,字節(jié)碼針對的是JVM岭参,即可跨平臺運行同樣的代碼
JAVA程序源代碼執(zhí)行順序
.class通過JVM到機器碼反惕,JVM加載器先加載字節(jié)碼文件,通過解釋器逐行解釋執(zhí)行演侯,執(zhí)行速度較慢姿染,方法和代碼塊需要被調用,就是所謂的熱點代碼秒际,后面引進JIT編譯器悬赏,JIT屬于運行時編譯,JIT編譯器完成第一次編譯娄徊,會將字節(jié)碼對應的機器碼保留下來闽颇,下次直接使用,機器碼效率高于JAVA嵌莉,這就是JAVA編譯和解釋共存的語言
HotSpot采用惰性評估做法进萄,二八定律消耗大部分系統(tǒng)資源的只有小部分代碼即熱點代碼,這就是JIT所需要執(zhí)行次數(shù)越多锐峭,速度快的原因中鼠,JDK9引入一種編譯模式,AOT,直接將字節(jié)碼編譯成機器碼沿癞,比JIT預熱的開銷援雇,JDK支持分層編譯和AOT協(xié)作使用,但AOT編譯質量不如JIT編譯器