java的编译器、解释器和JIT编译器(转载)
這篇我們來聊聊java的編譯器和解釋器。先看看官方的解釋:
Java Compiler (Java 編譯器)
Java compiler reads source files written in the Java programming language, and compiles them into bytecode class files.
Java編譯器讀取java源文件(*.java)并將它們編譯為java字節碼文件(*.class)。
Windows系統中的javac.exe可以簡單看成是Java編譯器。
Java Interpreter(Java 解釋器)
Java compilers generate machine-independent bytecodes instead of machine instructions. The interpreter is like a CPU implemented in software. It decodes and executes bytecodes, independent of what computer they were compiled on.
Java編譯器生成的是與機器碼不同的java字節碼,并不能被硬件中的CPU直接執行。而java解釋器就像植根于軟件中的CPU,能夠解析并執行java字節碼。
Windows系統中的java.exe可以簡單看成是Java解釋器。
image.png
通過上面的解釋,我們已經基本能夠知道java的編譯器和解釋器是干什么用的了。下面來聊聊為什么要有它們,當然只是我的理解,歡迎大家評論拍磚。
Java有個口號是“Write Once,Run Anywhere”,旨在展示Java程序設計語言的跨平臺特性,而能夠實現這個特性的基礎就是java字節碼文件和能夠執行它的Java虛擬機 - JVM,一個可以在不同的硬件平臺和操作系統上運行java字節碼的神器。所以很清晰了,生成java字節碼文件就是Java編譯器的工作,而執行字節碼的工作就是JVM中Java解釋器干的活,沒有它們就沒有“Write Once,Run Anywhere”。
在這里還要說個東東 - JIT編譯器(Just In Time Compile 即時編譯器),總體來說,這項技術是被用來改善虛擬機的性能的。附解釋:
Java程序最初是通過解釋器進行解釋執行的,當虛擬機發現某個方法或代碼塊運行的特別頻繁時,會把這些代碼認定為“熱點代碼”(Hot Spot Code,如循環,高頻度使用的方法等)。為了提高熱點代碼的執行效率,在運行時,虛擬機會把這些代碼編譯成本地機器碼,并進行各種層次的優化,完成這個任務的編譯器稱為JIT編譯器。JIT編譯器是JRE的一部分。
簡單的說,java解釋器一行一行的運行java字節碼還是太慢了,而機器碼運行起來最快。JIT編譯器把被多次調用的方法和被多次執行的循環體相關的字節碼編譯成本地機器碼并運行,就可以大大提高運行效率。
順帶說一句,解釋器 + JIT編譯器就是JVM執行引擎(Execute Engine):
?
image.png
- 機器無關優化:對中間代碼(指字節碼)的優化
- 機器相關優化:寄存器優化、多處理器優化、特殊指令優化、無用指令消除等
參考:
https://blog.csdn.net/sunxianghuang/article/details/52094859
總結
以上是生活随笔為你收集整理的java的编译器、解释器和JIT编译器(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: secure boot 是什么
- 下一篇: Premiere小清新风格满屏文字排版P