1. 程式人生 > 實用技巧 >Java程式的執行過程

Java程式的執行過程

執行過程:

在這裡插入圖片描述
大致過程就是,我們寫好的.java檔案(原始檔)被編譯器編譯後變成.class檔案(位元組碼),然後被JVM的類載入器載入到記憶體,通過位元組碼校驗器去做一些校驗,校驗通過後交由直譯器將位元組碼檔案解釋成計算機能夠識別的機器指令。
位元組碼:位元組碼是已經經過編譯,但與特定機器碼無關,需要直譯器轉譯後才能成為機器碼的中間程式碼。
Java位元組碼:是Java虛擬機器執行的一種指令格式。
直譯器:是一種電腦程式,能夠把高階程式語言一行一行直接翻譯執行。直譯器不會一次把整個程式翻譯出來,只像一位“中間人”,每次執行程式時都要先轉成另一種語言再作執行,因此直譯器的程式執行速度比較緩慢。它每翻譯一行程式敘述就立刻執行,然後再翻譯下一行,再執行,如此不停地進行下去。它會先將原始碼翻譯成另一種語言,以供多次執行而無需再經編譯。其製成品無需依賴編譯器而執行,程式執行速度比較快


具體執行過程:

1、編譯

在windows環境中,開啟命令視窗,切換到java檔案的目錄,使用 javac 命令,執行 javac xxx.java 把.java檔案編譯成.class檔案

2、裝載位元組碼

編譯好的.class檔案交給 JVM 執行,即使用java命令,執行java xxx(.class檔案的名稱,不帶字尾)。java命令將會啟動 JVM,並將後面的引數作為初始化類,通過 JVM 內的類載入器將位元組碼檔案裝載到記憶體中。

3、校驗位元組碼

類的載入是通過類載入器進行的,載入完後,先由位元組碼校驗器負責檢查那些無法執行的明顯有破壞性的操作。除了系統類之外,其他類都要被校驗。

校驗器執行的一些檢查:

  • 變數要在使用前初始化
  • 方法呼叫與物件引用型別之間要匹配
  • 訪問私有資料和方法的規則沒有被違反
  • 對本地變數的訪問都在執行的堆疊內
  • 執行時堆疊沒有溢位

如果這些檢查沒有通過,類最終不會被載入完成。

4、解釋位元組碼

JVM 把每一條要執行的位元組碼交給直譯器,翻譯成對應的機器語言,最終由作業系統執行。

JVM 解釋執行位元組碼檔案就是 JVM 操作 Java 直譯器進行解釋執行位元組碼檔案的過程。