天天看點

java中解釋器和編譯器

1、網友的解答

java中引入了虛拟機的概念,即在機器和編譯程式之間加入了一層抽象的虛拟機器。這台虛拟的機器在任何平台上都提供給編譯程式一個的共同的接口。編譯程式隻需要面向虛拟機,生成虛拟機能夠了解的代碼,然後由解釋器來将虛拟機代碼轉換為特定系統的機器碼執行。在Java中,這種供虛拟機了解的代碼叫做位元組碼(即擴充為.class的檔案),它不面向任何特定的處理器,隻面向虛拟機。每一種平台的解釋器是不同的,但是實作的虛拟機是相同的。Java源程式經過編譯器編譯後變成位元組碼,位元組碼由虛拟機解釋執行,虛拟機将每一條要執行的位元組碼送給解釋器,解釋器将其翻譯成特定機器上的機器碼,然後在特定的機器上運作,這就是上面提到的Java的特點的編譯與解釋并存的解釋。

2、編譯器是什麼?

編譯器是一種計算機程式,負責把一種程式設計語言(java)編寫的源碼(.java)轉換成另外一種計算機代碼(.class),後者往往是以二進制的形式被稱為目标代碼(object code)。這個轉換的過程通常的目的是生成可執行的程式。

編譯器的編譯後是“另外一種代碼”,這些編譯後的代碼是可執行的,如果還不能直接被執行,那麼還需要再編譯或再次解釋,再交由計算機硬體執行。

3、解釋器是什麼?

(1)在計算機科學中,解釋器是一種計算機程式,它直接執行由程式設計語言或腳本語言編寫的代碼,并不會把源代碼預編譯成機器碼。

(2)一個解釋器,通常會用以下的姿勢來執行程式代碼:分析源代碼,并且直接執行。 把源代碼翻譯成相對更加高效率的中間碼,然後立即執行它。 執行由解釋器内部的編譯器預編譯後儲存的代碼 ,可以把解釋器看成一個黑盒子,我們輸入源碼,它就會實時傳回結果。 不同類型的解釋器,黑盒子裡面的構造不一樣,有些還會內建編譯器,緩存編譯結果,用來提高執行效率(例如 Chrome V8 也是這麼做的)。 解釋器通常是工作在「運作時」,并且對于我們輸入的源碼,是一行一行的解釋然後執行,然後傳回結果。

4、總結

其實兩種操作都是把“代碼”各種轉換後産生另外一種“代碼”,差別就是産生的“代碼”不一樣。如下圖:

java中解釋器和編譯器