程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA如何執行子系統

JAVA如何執行子系統

編輯:關於JAVA
 

一、概述

執行引擎是Java虛擬機非常最核心的部分,對於物理即的執行引擎是直接建立在處理器、硬件、指令集合操作系統層面,而虛擬機執行引擎則是由自行定制的指令集與執行引擎的結構體系。執行引擎在執行Java會有解釋執行(通過解釋器)和編譯執行(通過JIT生成的本地代碼)兩種選擇,對於Android ART又多了一種提前編譯器(AOT)。

接下來,主要講解虛擬機的方法執行過程,對於Java虛擬機的解釋器的執行模型(不考慮異常處理):

do {
    atomically calculate pc and fetch opcode at pc;
    if (operands) fetch operands;
    execute the action for the opcode;
} while (there is more to do);

對象創建

對象創建,不包括數組和Class對象,例如 Person person = new Person()

當虛擬機遇到new指令時:

  • 在常量池中查找“Person”,看能否定位到Person類的符號引用;如果能,則繼續執行。
  • 再檢查Person類是否已經加載、解析和初始化;如果沒有初始化,則先執行類加載過程。
  • 類加載後,虛擬機為新生成的person對象在堆上分配相應大小的內存。(對象大小在類加載後確定)
  • 內存分配後,虛擬機將分配的內存空間都初始化為零值(不包括對象頭)。實例變量不賦初值也能使用對應的零值。
  • 設置對象頭信息,比如對象的哈希值,gc分代年齡等。

從虛擬機角度,到此一個新的對象已經創建完成。但從Java視角,對象才剛剛開始,init構造方法還沒有執行,所有字段還是零。執行完init方法,按java程序的構造方法進行初始化後,對象便是徹底創建完成。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved