Java是一種半編譯半解釋的語言。
一、編譯階段
使用指令:javac
這個階段,Java編譯器(也就是JVM:java虛擬機,後稱JVM),首先把你的代碼加載完成,而後開始檢查語法。此後會產生.class文件,這種文件不管是是在哪一種平臺上(window、Linux)此.class文件均是相同的,具備跨平臺性。
二、解釋執行階段
使用指令:java
這個階段,JVM將執行java代碼,JVM是運行於操做系統之上的,它屏蔽了不一樣系統之間的差別。java
jvm有兩種執行方式,一種是解釋執行,就是臨時把字節碼翻譯成本地碼再執行,另外一種是固化執行,就是第一次執行字節碼吧字節碼解釋成本地碼而後保存本地碼,之後再也不解釋字節碼而直接執行本地嗎。
兩種方式各有優劣,第一種效率比較慢,可是節省磁盤與內存空間,對於一些內存與磁盤小的平臺,如手機或者小型的電子儀器,他們沒有足夠的內存和磁盤;第二種執行效率快,可是比較消耗內存以及磁盤資源,對於磁盤以及內存資源充足的機器,就能夠這樣執行來提升程序運行速度。編程
A、解釋程序
所謂解釋程序是高級語言翻譯程序的一種,它將源語言(如BASIC)書寫的源程序做爲輸入,解釋一句後就提交計算機執行一句,並不造成目標程序。
就像外語翻譯中的「口譯」同樣,說一句翻一句,不產生全文的翻譯文本。這種工做方式很是適合於人經過終端設備與計算機會話,如在終端上打一條命令或語句,解釋程序就當即將此語句解釋成一條或幾條指令並提交硬件當即執行且將執行結果反映到終端,從終端把命令打入後,就能當即獲得計算結果。這的確是很方便的,很適合於一些小型機的計算問題。但解釋程序執行速度很慢,例如源程序中出現循環,則解釋程序也重複地解釋並提交執行這一組語句,這就形成很大浪費。 jvm
B、編譯程序
這是一類很重要的語言處理程序,它把高級語言(如FORTRAN、COBOL、Pascal、C等)源程序做爲輸入,進行翻譯轉換,產生出機器語言的目標程序,而後再讓計算機去執行這個目標程序,獲得計算結果。 編譯程序工做時,先分析,後綜合,從而獲得目標程序。所謂分析,是指詞法分析和語法分析;所謂綜合是指代碼優化,存儲分配和代碼生成。爲了完成這些分析綜合任務,
編譯程序採用對源程序進行屢次掃描的辦法,每次掃描集中完成一項或幾項任務,也有一項任務分散到幾回掃描去完成的。
下面舉一個四遍掃描的例子:
第一遍掃描作詞法分析;
第二遍掃描作語法分析;
第三遍掃描作代碼優化和存儲分配;
第四遍掃描作代碼生成。 優化
值得一提的是,大多數的編譯程序直接產生機器語言的目標代碼,造成可執行的目標文件,但也有的編譯程序則先產生彙編語言一級的符號代碼文件,而後再調用匯編程序進行翻譯加工處理,最後產生可執行的機器語言目標文件。 操作系統
在實際應用中,對於須要常常使用的有大量計算的大型題目,採用招待速度較快的編譯型的高級語言較好,雖然編譯過程自己較爲複雜,但一旦造成目標文件,之後可屢次使用。相反,對於小型題目或計算簡單不太費機時的題目,則多選用解釋型的會話式高級語言,如BASIC,這樣能夠大大縮短編程及調試的時間翻譯