歡迎您光臨本站 註冊首頁

簡單瞭解Java程序運行整體流程

←手機掃碼閱讀     techdo @ 2020-07-06 , reply:0

概述

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,構造器和初始化方法採用靜態綁定機制:不需要方法表。

                                                       

   


[techdo ] 簡單瞭解Java程序運行整體流程已經有228次圍觀

http://coctec.com/docs/java/show-post-241408.html