java半編譯半解釋
1.編譯型語言在程序執行之前,有一個單獨的編譯過程,將程序翻譯成機器語言,以後執行這個程序的時候,就不用再進行翻譯了。
2.解釋型語言,是在運行的時候將程序翻譯成機器語言,所以運行速度相對於編譯型語言要慢。
3.C/C++ 等都是編譯型語言,而Java,C#等都是解釋型語言。
4.雖然Java程序在運行之前也有一個編譯過程,但是並不是將程序編譯成機器語言,而是將它編譯成位元組碼(可以理解為一個中間語言)。
② Java的解釋執行是先全部解釋完後再執行還是邊解釋邊執行
它首先將源代碼編譯成二進制位元組碼(bytecode),然後依賴各種不同平台上的虛擬機來解釋執行位元組碼。從而實現了「一次編譯、到處執行」的跨平台特性。Java語言是解釋型的。如前所述,Java程序在Java平台上被編譯為位元組碼格式,然後可以在實現這個Java平台的任何系統中運行。在運行時,Java平台中的Java解釋器對這些位元組碼進行解釋執行,執行過程中需要的類在聯接階段被載入到運行環境中。既然Java語言是解釋型的,那它就是邊解釋邊執行咯 補充: 不過,雖然java是解釋型的語言,但是在不同的平台環境上的java虛擬機也是會有一次性解釋然後執行的情況的!!! 追問: java程序在一個平台上被解釋成了二進制目標代碼,退出java程序後,再運行java程序時,還需要再次解釋嗎?如果需要再次解釋,就顯得浪費資源;不再次解釋,程序就不能「一次編寫,到處運行」。 回答: 就hotspot虛擬機而言,有兩種模式,一是-client,二是-server -client模式下,是逐條解釋執行的 -server模式下,先解釋執行,然後jvm統計執行熱點,將這些熱點代碼仔細優化編譯成本地代碼,然後執行本地代碼,當這個熱點不再是熱點的時候,釋放編譯的代碼,重新解釋執行 其它的jvm可能在一啟動的時候就全部編譯成本地代碼 總之,JVM會自行優化!