1. 程式人生 > >JVM虛擬機器執行機制

JVM虛擬機器執行機制

什麼是JVM?
虛擬機器是物理機器的軟體實現。Java是用在VM上執行的WORA(Write Once Run Anywhere)概念而開發的。編譯器將Java檔案編譯為Java .class檔案,然後將.class檔案輸入到JVM中,JVM會載入並執行類檔案。


JVM基本概念


(1)基本概念:
JVM是可執行Java程式碼的假想計算機 ,包括一套位元組碼指令集、一組暫存器、一個棧、一個垃圾回收,堆 和 一個儲存方法域。JVM是執行在作業系統之上的,它與硬體沒有直接的互動。
(2) 執行過程:
我們都知道Java原始檔,通過編譯器,能夠生產相應的.Class檔案,也就是位元組碼檔案,而位元組碼檔案又通過Java虛擬機器中的直譯器,編譯成特定機器上的機器碼 。
也就是如下
① Java原始檔—->編譯器—->位元組碼檔案
② 位元組碼檔案—->JVM—->機器碼
每一種平臺的直譯器是不同的,但是實現的虛擬機器是相同的,這也就是Java為什麼能夠跨平臺的原因了 ,當一個程式從開始執行,這時虛擬機器就開始例項化了,多個程式啟動就會存在多個虛擬機器例項。程式退出或者關閉,則虛擬機器例項消亡,多個虛擬機器例項之間資料不能共享。
(3) 三種JVM:
在JDK1.7及其以前我們所使用的都是Sun公司的HotSpot,但由於Sun公司和BEA公司都被oracle收購,Jdk1.8將採用Sun公司的HotSpot和BEA公司的JRockit兩個JVM中精華形成jdk1.8的JVM。
JVM如何工作?
如上面架構圖所示,JVM分為三個主要子系統:
一、類載入器子系統
Java的動態類載入功能由類載入器子系統處理。它在執行時,而不是編譯時首次引用類的時候載入、連結、並初始化類檔案。
1.載入
類將通過此元件載入。Boot Strap Class Loader,Extension Class Loader和Application Class Loader是有助於實現的三個類載入器。
上面的類記載器在載入類檔案時遵循Delegation Hierarchy 演算法。
2.連結
3.初始化
這是類載入的最後階段,這裡所有的靜態變數都將被賦予原始值,並執行靜態塊。
二、執行時資料區
執行時資料區分為5個主要元件:
(1)方法區——所有的類級別資料將儲存在這裡,包括靜態變數。每個JVM只有一個方法區,並且它是一個共享資源。
(2)堆區域——所有物件及其對應的例項變數和陣列將儲存在這裡。每個JVM也有一個堆區域。由於方法和堆區域共享多個執行緒的記憶體,因此所儲存的資料非執行緒安全。
(3)堆疊區——對於每個執行緒,將建立一個單獨的執行時棧。對於每個方法呼叫,將在堆疊儲存器中產生一個條目,稱為堆疊幀。所有區域性變數將在堆疊記憶體中建立。堆疊區域是執行緒安全的,因為它不是共享資源。堆疊幀分為三個子元素:
(4)PC暫存器——每個執行緒都有單獨的PC暫存器,用於儲存當前執行指令的地址,一旦指令執行,PC暫存器將更新到下一條指令。
(5)本地方法堆疊——本地方法堆疊儲存本地方法資訊。對於每個執行緒,將建立一個單獨的本地方法堆疊。
三、執行引擎
分配給執行時資料區的位元組碼將由執行引擎執行。執行引擎讀取位元組碼並逐個執行它。
直譯器——直譯器解釋位元組碼較快,但執行慢。直譯器的缺點是當一個方法被多次呼叫時,每次都需要新的解析。
JIT編譯器——JIT編譯器消除了直譯器的缺點。執行引擎將在轉換位元組碼時使用直譯器的幫助,但是當它發現重複的程式碼時,它使用JIT編譯器,編譯器會編譯整個位元組碼並將其更改為原生代碼。這個原生代碼將直接用於重複的方法呼叫,從而提高系統性能。
垃圾收集器:收集和刪除未引用的物件。可以通過呼叫“System.gc()”觸發垃圾收集器,但不能保證執行。JVM的垃圾回收收集建立的物件。
Java本機介面(JNI):JNI將與本地方法庫進行互動,並提供執行引擎所需的本地庫。

相關推薦

JVM虛擬機器執行機制

什麼是JVM? 虛擬機器是物理機器的軟體實現。Java是用在VM上執行的WORA(Write Once Run Anywhere)概念而開發的。編譯器將Java檔案編譯為Java .class檔案,然後將.class檔案輸入到JVM中,JVM會載入並執行類檔案。 JVM基本概

java虛擬機器執行機制

    首先簡單闡述下解釋型語言和編譯型語言的聯絡與區別。     編譯型語言是通過編譯器將程式編譯成目標機器所能識別的機器碼,而解釋型語言不需要編譯過程。由該語言的直譯器讀取指令碼,按照語法規則進行解釋,然後呼叫直譯器內建的命令(或者庫函式)。例如,C語言的printf(

jvm虛擬機器工作機制【轉】

轉自:https://www.cnblogs.com/lao-liang/p/5110710.html 1 概述   眾所周知,Java支援平臺無關性、安全性和網路移動性。而Java平臺由Java虛擬機器和Java核心類所構成,它為純Java程式提供了統一的程式設計介面,而不管下層作業系統是什麼。正是得益

關於Class物件、類載入機制虛擬機器執行時記憶體佈局的全面解析和推測

簡介: 本文是對Java的類載入機制,Class物件,反射原理等相關概念的理解、驗證和Java虛擬機器中記憶體佈局的一些推測。本文重點講述瞭如何理解Class物件以及Class物件的作用。 歡迎探討,如有錯誤敬請指正 如需轉載,請註明出處 http://www.cnblogs.com/nul

Java虛擬機器JVM原始碼):JDK10對Java虛擬機器執行時資料區的劃分(詳細圖解)

Java虛擬機器執行時資料區 為什麼要研究這個,因為JDK都已經發布到10了,必須要更新自己對Java虛擬機器新的認識。 一、執行時資料區的劃分 1.1 官方劃分 關於JDK10對執行時資料區的劃分,在官方文件說的非常清楚。 學習技術,一定要學會看第一手資料。 Ja

深入理解JVM虛擬機器讀書筆記【第九章】類載入及執行子系統的案例與實戰

9.1 概述 9.2 案例分析 9.2.1 Tomcat:正統的類載入器架構 9.2.2 OSGI:靈活的類載入器架構 9.2.3 位元組碼生成技術與動態代理

深入理解JVM虛擬機器讀書筆記【第八章】虛擬機器位元組碼執行引擎

8.1 概述 8.2 執行時棧幀結構 8.2.1 區域性變量表 8.2.2 運算元棧 8.2.3 動態連線 8.2.4 方法返回地址

深入理解JVM虛擬機器讀書筆記【第七章】虛擬機器類載入機制

7.1 概述 7.2 類載入的時機 7.3 類載入的過程 7.3.1 載入 7.3.2 驗證 1.檔案格式驗證 2.元資料驗證 3.位元組碼驗證

jvm虛擬機器 class檔案常量池與執行時常量池

jvm虛擬機器 class檔案常量池與執行時常量池 class檔案常量池 java檔案編譯後生成class檔案,裡面存有兩部分內容: 類的版本、欄位、方法、介面等描述資訊。(欄位是指我們平時在介面或類裡宣告的各種變數 int a 等) 常量池:存放編譯期生成的字

深入理解JVM虛擬機器-2自動記憶體管理機制

java虛擬機器所管理的記憶體將會包括一下幾個執行時資料區域。 程式計數器: 程式計數器是一塊較小的記憶體空間。位元組碼解析式工作時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來

深入理解JVM虛擬機器(二):垃圾回收機制

談起GC,應該是讓Java程式設計師最激動的一項技術,我相信每個Java程式設計師都有探究GC本質的衝動!JVM垃圾回收機制對於瞭解物件的建立和物件的回收極為重要,是每個Java程式設計師必須掌握的技能。 本部落格圍繞三個問題來展開 哪些記憶體需要回收? 什

深入理解JVM虛擬機器(七):虛擬機器位元組碼執行引擎

程式碼編譯的結果就是從本地機器碼轉變為位元組碼。我們都知道,編譯器將Java原始碼轉換成位元組碼?那麼位元組碼是如何被執行的呢?這就涉及到了JVM位元組碼執行引擎,執行引擎負責具體的程式碼呼叫及執行過程。就目前而言,所有的執行引擎的基本一致: 輸入:位元組碼檔案

JVM虛擬機器學習--GC垃圾回收機制及常用演算法介紹

一、GC--Garbage Collection 直譯就是垃圾回收。 GC主要是用來回收記憶體中已經被用完但是未被釋放的空間(主要是指堆記憶體)。通過GC可以一定程度避免記憶體溢位。 記憶體垃圾回收並不只是Java虛擬機器獨創的。很多其他主流語言都有垃圾回收思想。 二、

JVM從小白學成大佬】2.Java虛擬機器執行時資料區

目錄 1.執行時資料區介紹 2.堆(Heap) 是否可能有兩個物件共用一段記憶體的事故? 3.方法區(Method Area) 4.程式計數器(Program Counter

JVM效能優化系列-(3) 虛擬機器執行子系統

3. 虛擬機器執行子系統 3.1 Java跨平臺的基礎 Java剛誕生的宣傳口號:一次編寫,到處執行(Write Once, Run Anywhere),其中位元組碼是構成平臺無關的基石,也是語言無關性的基礎。 Java虛擬機器不和包括Java在內的任何語言繫結,它只與Class檔案這種特定的二進位制檔案

虛擬機器執行UEFI

qemu虛擬機器執行UEFI 安裝qemu虛擬機器 dnf install qemu 編譯 Ovfm build -p OvmfPkg/OvmfPkgX64.dsc 生成ovfm韌體 qemu啟動並使用該韌體: qemu-syst

大型電商基於Springboot+Springcloud微服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現微服務架構

大型電商基於Springboot+Springcloud微服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現微服務架構39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設

JVM虛擬機器--隨筆

之前也看過很多資料,不過都自然而然的過濾了很多,下面就把自己對JVM初步的認識整理一下: JVM全稱(Java Virtual Machine),跟我們程式設計師接觸最多的差不多就是它裡面的棧、堆、方法區,還有一個比較重要的就是程式計數器 程式計數器是什麼呢? 程式計數器是一塊較小的記憶體空間

vmware虛擬機器執行卡慢的解決辦法

虛擬機器的執行速度有一部分原因決定於你的物理機的配置,如果你的物理機配置不高,建議不要執行虛擬機器,那樣反而會更卡! 切記!!!在操作之前,先給虛擬機器拍攝一個快照,然後所有操作都在虛擬機器關機的情況下執行!圖中沒讓執行的操作或者勾選選項,不要私自操作。 以下幾張圖,可以讓你的虛

Java虛擬機器 虛擬機器執行子系統

程式碼編譯的結構從本地機器碼轉變為位元組碼,是儲存格式發展的一小步,卻是程式語言發展的一大步。 主要內容 類檔案結構 虛擬機器類載入機制 虛擬機器位元組碼執行引擎 類檔案結構 無關性基石 各種不同的虛擬機器都可以載入和執行一種平臺無關的位元組碼,從而實現“一次編寫,到處執行”。