1. 程式人生 > 程式設計 >簡單瞭解Java程式執行整體流程

簡單瞭解Java程式執行整體流程

概述

Java程式從建立原始檔到程式執行要經歷兩個主要步驟:

  • 原始檔 編譯器編譯> 位元組碼檔案(ByteCode)。
  • 位元組碼檔案 JVM解釋執行> 在記憶體中執行

Java程式從編譯到執行

示例程式:

public class ClassA{
  public static void main(String[] args){
    ClassB b = new ClassB("b");
    b.method();
  }
}

class ClassB{
  private String name;
  public ClassB(String name){
    this.name = name;
  }
  
  public void method(){
    System.out.println("ClassB method()");
  }

}

編譯

  • 原始檔被編譯成.class檔案。
  • 若一個類所依賴的類還沒有編譯,則先編譯被依賴的類,然後引用。
  • 若已編譯,則直接引用。
  • 若找不到指定類的檔案,則丟擲cannot find symbol錯誤。
  • 編譯後生成的位元組碼檔案由兩部分組成:
    • 常量池:程式碼中的所有token(類名,成員變數名)和符號引用(方法引用,成員變數引用)
    • 方法位元組碼:類中各個方法的位元組碼。

執行

Java類的執行過程:

  • 類的載入
  • 類的執行

注:

JVM在程式第一次主動使用類的時候才載入類,而不是一開始將所有的類都載入到記憶體中,只加載一次。

詳細步驟:

  • 系統啟動一個JVM程序,JVM從classpath路徑中查詢對應的位元組碼檔案,將對應的類資訊載入到執行時資料區的方法區內(類的載入)。
  • JVM找到類的主函式入口,執行main函式。
  • 若需建立物件,而方法區沒有該類的資訊,則載入對應的類,並把類資訊放入方法區。
  • 載入所需的類後,JVM在堆區中為例項物件分配記憶體,並呼叫建構函式初始化例項。(該例項有指向方法區對應類的類資訊的引用)
  • 當呼叫例項的方法時,JVM由物件引用找到堆中的物件,再由物件持有的引用定位到方法區中類的型別資訊的方法表,從而獲得待呼叫函式的位元組碼的地址。
  • 開始執行呼叫的函式。

注:

  • public和protected的例項方法採用動態繫結機制:要用到方法表。
  • private,static,構造器和初始化方法採用靜態繫結機制:不需要方法表。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。