JVM、Java編譯器和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)的虛擬機。url

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

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

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

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

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

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

 

部分轉載自:

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

相關文章
相關標籤/搜索