1. 程式人生 > 其它 >JVM-執行引擎

JVM-執行引擎

Execution Engine

執行引擎概述

  • 執行引擎是Java虛擬機器核心的組成部分之一
  • “虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、快取、指令集和作業系統層面上的,而虛擬機器的執行引擎則是由軟體自行實現的,因此可以不受物理條件限制地定製指令集與執行引擎的結構體系,能夠執行那些不被硬體直接支援的指令集格式
  • JVM的主要任務是裝載位元組碼到其內部,但位元組碼不能直接執行在作業系統之上。執行引擎的任務就是將位元組碼指令解釋/編譯(後端編譯)為對應平臺上的本地機器指令才可以。簡單的說:JVM中執行引擎充當了將高階語言翻譯為機器語言的譯者

執行引擎工作過程

  • 執行引擎在執行的過程中究竟需要執行什麼樣的位元組碼指令完全依賴於PC暫存器
  • 每當執行完一項指令操作後,PC暫存器就會更新下一條需要被執行的指令地址
  • 方法在執行過程中,執行引擎有可能會通過儲存在區域性變量表中的物件引用準確定位到儲存在Java堆區中的物件例項資訊,以及通過物件頭中的元資料指標定位到目標物件的型別資訊

Java編譯和執行的過程

橙色部分為前端編譯器生成線型的位元組碼指令
綠色部分為直譯器
藍色部分為後端編譯器

大部分的程式程式碼轉換成物理機的目的碼或者虛擬機器能執行的指令集之前,都需要經過上圖的各個步驟

直譯器(Interpreter):當Java虛擬機器啟動時會根據定義的規範對位元組碼採用逐行解釋的方式執行,將每條位元組碼檔案中的內容“翻譯”為對應平臺的本地機器指令執行
JIT(Just In Time Compiler)編譯器:就是虛擬機器將原始碼直接編譯成和本地機器平臺相關的機器語言

問題:為什麼說Java是半編譯半解釋型語言?
執行引擎即可以解釋執行也可以編譯執行

JDK1.0時代,將Java語言定位為“解釋執行”是比較準確的。再後來,Java也發展出可以直接生成原生代碼的編譯器(提高效率)

現在JVM在執行Java的時候,通常都會將解釋執行與編譯執行二者結合起來進行