JVM、Java編譯器和Java解釋器

作用:

JVM:JVM有自己完善的硬件架構,如處理器、堆棧(Stack)、寄存器等,還具有相應的指令系統(字節碼就是一種指令格式)。JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需要生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。JVM是Java平臺無關的基礎。JVM負責運行字節碼:JVM把每一條要執行的字節碼交給解釋器,翻譯成對應的機器碼,然後由解釋器執行JVM解釋執行字節碼文件就是JVM操作Java解釋器進行解釋執行字節碼文件的過程

Java編譯器:將Java源文件(.java文件)編譯成字節碼文件(.class文件,是特殊的二進制文件,二進制字節碼文件),這種字節碼就是JVM的“機器語言”。javac.exe可以簡單看成是Java編譯器。

Java解釋器:是JVM的一部分。Java解釋器用來解釋執行Java編譯器編譯後的程序。java.exe可以簡單看成是Java解釋器。

注意:通常情況下,一個平臺上的二進制可執行文件不能在其他平臺上工作,因爲此可執行文件包含了對目標處理器的機器語言。而Class文件這種特殊的二進制文件,是可以運行在任何支持Java虛擬機的硬件平臺和操作系統上的!


維基百科定義:

JVM:一種能夠運行Java字節碼(Java bytecode)的虛擬機。

字節碼:字節碼是已經經過編譯,但與特定機器碼無關,需要解釋器轉譯後才能成爲機器碼的中間代碼。

Java字節碼:是Java虛擬機執行的一種指令格式。

解釋器:是一種電腦程序,能夠把高級編程語言一行一行直接翻譯運行。解釋器不會一次把整個程序翻譯出來,只像一位“中間人”,每次運行程序時都要先轉成另一種語言再作運行,因此解釋器的程序運行速度比較緩慢。它每翻譯一行程序敘述就立刻運行,然後再翻譯下一行,再運行,如此不停地進行下去。它會先將源碼翻譯成另一種語言,以供多次運行而無需再經編譯。其製成品無需依賴編譯器而運行,程序運行速度比較快。

即時編譯(Just-in-time compilation: JIT):又叫實時編譯、及時編譯。是指一種在運行時期把字節碼編譯成原生機器碼的技術,一句一句翻譯源代碼,但是會將翻譯過的代碼緩存起來以降低性能耗損。這項技術是被用來改善虛擬機的性能的。

JIT編譯器是JRE的一部分。原本的Java程序都是要經過解釋執行的,其執行速度肯定比可執行的二進制字節碼程序慢。爲了提高執行速度,引入了JIT。在運行時,JIT會把翻譯過來的機器碼保存起來,以備下次使用。而如果JIT對每條字節碼都進行編譯,則會負擔過重,所以,JIT只會對經常執行的字節碼進行編譯,如循環,高頻度使用的方法等。它會以整個方法爲單位,一次性將整個方法的字節碼編譯爲本地機器碼,然後直接運行編譯後的機器碼。

二進制文件:廣義的二進制文件即爲文件,由文件在外部存儲設備的存放方式爲二進制而得名。狹義的二進制文件即指除文本文件以外的文件。文本文件的格式包括:ASCII、MIME、txt。


部分轉載自:

http://wenda.tianya.cn/question/4dfa95615c1bbb52


發佈了31 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章