首頁>Club>
3
回覆列表
  • 1 # Java碼農之路

    一、Java程式碼執行流程

    A、基本流程

    一個Java專案,包含很多的「.java」為字尾的原始碼檔案,除去IDE裡直接執行除錯,一般來說,都是把程式碼打成jar包,或者是war包,最後將打包好的jar包或是war包傳到線上伺服器部署。

    部署方式很多,最基本的一種是透過Tomcat容器來部署,也可以是自己手動透過java命令來執行一個jar包中的程式碼。

    B、編譯

    上述流程中有一個非常關鍵的點,「編譯」

    在java程式碼打包的過程中,一般會把原始碼編譯成「.class」字尾的位元組碼檔案。只有位元組碼檔案class才能被JVM識別並解釋執行。

    C、JVM程序

    對於編譯好的class位元組碼,需要使用諸如java -jar之類的命令來執行寫好的程式碼;一旦使用java命令,實際上此時就會啟動一個JVM程序。

    JVM程序會負責執行這些class位元組碼檔案,也就相當於負責執行我們寫好的程式碼。

    D、類載入

    JVM要執行這些class位元組碼檔案中的程式碼,會採用類載入器把編譯好的class位元組碼檔案載入進JVM記憶體中

    E、解釋執行

    最後JVM會基於自己的位元組碼執行引擎,來執行載入到記憶體裡的類。當JVM需要哪個類時,會使用類載入器來載入對應的類。

  • 2 # Prinkle佐

    從虛擬機器的視角來看,執行java程式碼首先需要將它編譯而成的class檔案載入到java虛擬機器中。載入後的java類會被存放在方法區中。實際執行時,虛擬機器會執行方法區的程式碼。

    在執行過程中,每當呼叫進入一個java方法,java虛擬機器會在當前執行緒的java方法棧中生成一個棧幀,用以存放區域性變數以及位元組碼的運算元。這個棧幀的大小是提前計算好的,而且java虛擬機器不要求棧幀在記憶體空間裡連續分佈。

    在hotspot裡面,上述翻譯過程有兩種形式:第一種是解釋執行,即逐條將位元組碼翻譯成機器碼並執行;第二種是即時編譯(JIT),即將一個方法包含的所有位元組碼編譯成機器碼後再執行。

  • 中秋節和大豐收的關聯?
  • 《龍珠超》中貝吉塔的人設為什麼越來越好了?