解释性,和编译性
JAVA
JAVA語(yǔ)言是一種編譯型-解釋型語(yǔ)言。同一時(shí)候具備編譯特性和解釋特性(其所謂的編譯過(guò)程僅僅是將.java文件編程成平臺(tái)無(wú)關(guān)的字節(jié)碼.class文件,并不是像C一樣編譯成可執(zhí)行的機(jī)器語(yǔ)言)。
作為編譯型語(yǔ)言,JAVA程序要被統(tǒng)一編譯成字節(jié)碼文件——文件后綴是class。此種文件在java中又稱(chēng)為類(lèi)文件。java類(lèi)文件不能再計(jì)算機(jī)上直接 執(zhí)行,它需要被java虛擬機(jī)翻譯成本地的機(jī)器碼后才能執(zhí)行,而java虛擬機(jī)的翻譯過(guò)程則是解釋性的。
C#
C#語(yǔ)言是編譯型語(yǔ)言,但其“編譯”過(guò)程比較特殊,具體說(shuō)明如下:
C#程序在第一次運(yùn)行的時(shí)候,會(huì)依賴(lài)其.NET Frameworker平 臺(tái),編譯成IL中間碼),然后由JIT compiler翻譯成本地的機(jī)器碼執(zhí)行。從第二次在運(yùn)行相同的程序,則不需要再執(zhí)行以上編譯和翻譯過(guò)程,而是直接運(yùn)行第一次翻譯成的機(jī)器碼。所以對(duì)于 C#來(lái)說(shuō),通常第一次運(yùn)行時(shí)間會(huì)很長(zhǎng),但從第二次開(kāi)始,程序的執(zhí)行時(shí)間會(huì)快很多。 那么,C#為什么要進(jìn)行兩次“編譯”呢?其實(shí),微軟想通過(guò)動(dòng)態(tài)編譯(由JIT compiler工具實(shí)現(xiàn))來(lái)實(shí)現(xiàn)其程序運(yùn)行的最優(yōu)化。如果代碼在運(yùn)行前進(jìn)行動(dòng)態(tài)編譯運(yùn)行,那么JIT compiler可以很智能的根據(jù)你本地機(jī)器的硬件條件來(lái)進(jìn)行優(yōu)化,比如使用更好的register,機(jī)器指令等等,而不是像原來(lái)那樣,build一份程序針對(duì)所有硬件的機(jī)器跑,沒(méi)有充分利用各個(gè)機(jī)器的條件。 參考地址:- 解釋型語(yǔ)言和編譯型語(yǔ)言的區(qū)別
-
編譯性語(yǔ)言、解釋性語(yǔ)言和腳本語(yǔ)言的區(qū)別
轉(zhuǎn)載于:https://www.cnblogs.com/Jacob-Wu/p/9416684.html
總結(jié)
- 上一篇: linux 网络编程 2---(TCP编
- 下一篇: YII2 整合百度UEditor上传图片