Java宣稱自己是write once, run everywhere.那這是如何做到的呢?大部分人都會回答說是通過編譯成爲class文件然後運行JVM上,那麼是所有的情況下都這樣嗎?
自然有例外,其實總的來說,編譯在JVM代表三個不同的操作。
- 前端編譯,指的是.java文件變爲.class的過程
- JIT編譯,指的是將熱點字節碼編譯爲機器碼的過程(方法級)
- AOT編譯,指的是直接將Java文件編譯成爲機器碼的過程。(Java9)
那麼這種特別的編譯方式到底有啥好處呢?
首先,通過JVM,屏蔽了底層操作系統API的區別,使得只要編譯成爲class文件即可運行,其次JIT只編譯熱點代碼,提高了效率,避免了冷代碼也參與編譯。