Java 程式執行過程

屿蓝深海發表於2024-04-04

Java 程式的執行過程

Tips:
對於java程式的執行的過程,參考了兩張圖片來理解,並主要參照圖2進行講解!(這裡不對具體的內容進行詳細講解,對於具體的內容,將給出參考的連結)

Java 程式執行過程

圖 1:JVM Model
Java 程式執行過程

圖 2:Java 執行流程

java的執行可以分為編譯和執行兩個階段,分別對應著圖2的左側和右側部分這部分我們將側重執行階段的介紹。

  1. 編譯:將合法.java檔案翻譯成位元組碼(bytecode)檔案.class。其中包含著檢查、分析(詞法,語法,語義),最佳化等流程。
    https://www.cnblogs.com/code-duck/p/13568092.html
  2. 執行:執行階段的整個流程可以分為載入階段(loader),連結階段(linking),初始化階段(intialization)、解釋執行階段(interpreter)。參照圖 1的JVM模型,可知,載入、連結、初始化和解釋執行之間是透過執行時資料區域進行互動的(runtime data area)
  • 載入階段:將位元組碼檔案加入到記憶體中JVM的方法區(Methods Area)。
  • 連結階段:主要包含驗證(保證載入類的正確性)、準備(為類變數分配記憶體並設定類變數的初始值)、解析(將常量池中的符號引用替換為直接引用)三個階段。
  • 初始化階段:若該類具有超類,則對其進行初始化,執行靜態初始化器(成員變數也會被初始化)。

Tip:
載入、連結、初始化的詳細瞭解可以參考如下連結:
https://blog.csdn.net/qq_32238611/article/details/114546719
關於JVM方法區維護的類資訊及其他區域維護的資訊可以參考如下連結:
https://blog.csdn.net/yfqnihao/article/details/8289363

  • 執行階段:JVM將定位public static void main(String[] args),JVM按照main()方法的程式碼進行逐行執行。

Tips:

  1. JVM記憶體簡單介紹:
    方法區:在載入階段,只將類載入到方法區(故方法區中還包含常量池等),
    堆:具體例項的建立是在程式執行時(例項建立被放在堆記憶體中)
    棧:方法執行過程中的區域性變數
    PC暫存器:記錄程式執行的位置。
    本地方法棧:指使用到的本地方法。

①PC暫存器、本地放法棧和棧 是執行緒對立的。
②JVM在作業系統層面為作業系統的堆區,因此可以實現捕獲異常等優勢
2. 解釋執行過程
解釋執行包含JIT、AOT等諸多技巧,但是不同的技巧有著不同的優勢和應用場景。

Blog Reference

https://www.cnblogs.com/linj7/p/14122919.html
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.1
https://javaguide.cn/java/basis/java-basic-questions-01.html#什麼是位元組碼-採用位元組碼的好處是什麼

LLM Question

https://poe.com/chat

相關文章