Java Jvm執行機制原理

一:簡介

在學習Java虛擬機器之前,也就是Jvm之前,我想大家能夠帶著問題去學習,這樣的話,大家學習起來也會比較有所獲!

1。

Java

虛擬機器(Jvm)是什麼?

2。Java虛擬機器是用來幹什麼的?

3。Java虛擬機器它的體系結構是什麼樣子的?

4。Java虛擬機器在工作做扮演什麼角色?

5。Java虛擬機器在執行時資料區?

二:Jvm基礎概念

Java虛擬機器(Jvm)是可執行Java程式碼的假想計算機

Java虛擬機器包括一套位元組碼指令集、一組暫存器、一個棧、一個垃圾回收堆和一個儲存方法域。

三:Jvm

我們都知道Java原始檔,透過編譯器,能夠生產相應的。Class檔案,也就是位元組碼檔案,而位元組碼檔案又透過Java虛擬機器中的直譯器,也就是前面所有的Java虛擬機器中的位元組碼指令集…。編譯成特定機器上的機器碼

也就是如下:

1。Java原始檔—->編譯器—->位元組碼檔案

2。位元組碼檔案—->Jvm—->機器碼

每一種平臺的直譯器是不同的,但是實現的虛擬機器是相同的。這也就是Java為什麼能夠跨平臺的原因了

當一個程式從開始執行一個程式,這時虛擬機器就開始例項化了。多個程式啟動就會存在多個虛擬機器例項。程式退出或者關閉。則虛擬機器例項消亡。多個虛擬機器例項之間資料不能共享。

四:Jvm的體系結構

Jvm的體系結構入下圖:

Java Jvm執行機制原理

1、垃圾回收器

垃圾回收器(又稱為gc):是負責回收記憶體中無用的物件(好像地球人都知道),就是這些物件沒有任何引用了,它就會被視為:垃圾,也就被幹掉了。

2、類裝載子系統

一聽名字,大家就知道,肯定是用於操作我們編譯好的。Class檔案的系統,他作用如下:

v 定位和匯入二進位制class檔案

v 驗證匯入類的正確性

v 為類分配初始化記憶體

v 幫助解析符號引用

3、執行引擎(Execution Engine)

執行包在裝載類的方法中的指令,也就是方法

4、執行區資料

如上圖:虛擬機器記憶體或者Jvm記憶體,衝整個計算機記憶體中開闢一塊記憶體儲存Jvm需要用到的物件,變數等,執行區資料有分很多小區,分別為:方法區,虛擬機器棧,本地方法棧,堆,程式計數器

五:Jvm執行時資料區

1。程式計數器

當前執行緒執行位元組碼的訊號指示器,執行緒是私有的,它的生命週期和執行緒相同分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。

2。虛擬機器棧

Java虛擬機器棧描述的是Java方法(區別於native的本地方法)執行的記憶體模型:每個方法被執行的時候都會同時建立一個棧幀(Stack Frame)用於儲存區域性變量表、操作棧、動作連結、方法出口等資訊。

執行緒私有,生命週期和執行緒相同,都有各個獨立的計數器,各不影響。

每個方法被呼叫直至執行完成的過程,就對應著一個棧幀在虛擬機器棧中從入棧到出棧的過程。

3。本地方法棧

和虛擬機器方法棧差不多類似,但是本地方法棧是服務於虛擬機器所

使用到的Native方法服務

4。本地方法區:

只是執行Native 方法。

如果這個區的記憶體不足也是會丟擲StackOverflowError 和OutOfMemoryError 異常。

六:堆

堆這塊區域是Jvm中最大的,應用的物件和資料都是存在這個區域。這塊區域也是執行緒共享的。也是 gc 主要的回收區。

其實這也就是大家聽的比較多的:Java (gc)垃圾回收器