日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java的编译器、解释器和JIT编译器(转载)

發(fā)布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的编译器、解释器和JIT编译器(转载) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇我們來聊聊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字節(jié)碼文件(*.class)。
Windows系統(tǒng)中的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編譯器生成的是與機(jī)器碼不同的java字節(jié)碼,并不能被硬件中的CPU直接執(zhí)行。而java解釋器就像植根于軟件中的CPU,能夠解析并執(zhí)行java字節(jié)碼。
Windows系統(tǒng)中的java.exe可以簡單看成是Java解釋器。

image.png

通過上面的解釋,我們已經(jīng)基本能夠知道java的編譯器和解釋器是干什么用的了。下面來聊聊為什么要有它們,當(dāng)然只是我的理解,歡迎大家評論拍磚。

Java有個口號是“Write Once,Run Anywhere”,旨在展示Java程序設(shè)計(jì)語言的跨平臺特性,而能夠?qū)崿F(xiàn)這個特性的基礎(chǔ)就是java字節(jié)碼文件和能夠執(zhí)行它的Java虛擬機(jī) - JVM,一個可以在不同的硬件平臺和操作系統(tǒng)上運(yùn)行java字節(jié)碼的神器。所以很清晰了,生成java字節(jié)碼文件就是Java編譯器的工作,而執(zhí)行字節(jié)碼的工作就是JVM中Java解釋器干的活,沒有它們就沒有“Write Once,Run Anywhere”。

在這里還要說個東東 - JIT編譯器(Just In Time Compile 即時編譯器),總體來說,這項(xiàng)技術(shù)是被用來改善虛擬機(jī)的性能的。附解釋:

Java程序最初是通過解釋器進(jìn)行解釋執(zhí)行的,當(dāng)虛擬機(jī)發(fā)現(xiàn)某個方法或代碼塊運(yùn)行的特別頻繁時,會把這些代碼認(rèn)定為“熱點(diǎn)代碼”(Hot Spot Code,如循環(huán),高頻度使用的方法等)。為了提高熱點(diǎn)代碼的執(zhí)行效率,在運(yùn)行時,虛擬機(jī)會把這些代碼編譯成本地機(jī)器碼,并進(jìn)行各種層次的優(yōu)化,完成這個任務(wù)的編譯器稱為JIT編譯器。JIT編譯器是JRE的一部分。

簡單的說,java解釋器一行一行的運(yùn)行java字節(jié)碼還是太慢了,而機(jī)器碼運(yùn)行起來最快。JIT編譯器把被多次調(diào)用的方法和被多次執(zhí)行的循環(huán)體相關(guān)的字節(jié)碼編譯成本地機(jī)器碼并運(yùn)行,就可以大大提高運(yùn)行效率。

順帶說一句,解釋器 + JIT編譯器就是JVM執(zhí)行引擎(Execute Engine):

?

image.png

  • 機(jī)器無關(guān)優(yōu)化:對中間代碼(指字節(jié)碼)的優(yōu)化
  • 機(jī)器相關(guān)優(yōu)化:寄存器優(yōu)化、多處理器優(yōu)化、特殊指令優(yōu)化、無用指令消除等

參考:
https://blog.csdn.net/sunxianghuang/article/details/52094859

總結(jié)

以上是生活随笔為你收集整理的java的编译器、解释器和JIT编译器(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。