1. 程式人生 > >解釋性,和編譯性

解釋性,和編譯性

compile targe 動態 為什麽 ref 虛擬 blank 依賴 編譯

JAVA

  JAVA語言是一種編譯型-解釋型語言。同一時候具備編譯特性和解釋特性(其所謂的編譯過程僅僅是將.java文件編程成平臺無關的字節碼.class文件,並不是像C一樣編譯成可執行的機器語言)。

  作為編譯型語言,JAVA程序要被統一編譯成字節碼文件——文件後綴是class。此種文件在java中又稱為類文件。java類文件不能再計算機上直接 執行,它需要被java虛擬機翻譯成本地的機器碼後才能執行,而java虛擬機的翻譯過程則是解釋性的。

C#

C#語言是編譯型語言,但其“編譯”過程比較特殊,具體說明如下:

  C#程序在第一次運行的時候,會依賴其.NET Frameworker平 臺,編譯成IL中間碼),然後由JIT compiler翻譯成本地的機器碼執行。從第二次在運行相同的程序,則不需要再執行以上編譯和翻譯過程,而是直接運行第一次翻譯成的機器碼。所以對於 C#來說,通常第一次運行時間會很長,但從第二次開始,程序的執行時間會快很多。   那麽,C#為什麽要進行兩次“編譯”呢?其實,微軟想通過動態編譯(由JIT compiler工具實現)來實現其程序運行的最優化。如果代碼在運行前進行動態編譯運行,那麽JIT compiler可以很智能的根據你本地機器的硬件條件來進行優化,比如使用更好的register,機器指令等等,而不是像原來那樣,build一份程序針對所有硬件的機器跑,沒有充分利用各個機器的條件。 參考地址:
  • 解釋型語言和編譯型語言的區別
  • 編譯性語言、解釋性語言和腳本語言的區別

解釋性,和編譯性