JVM的組成

JVM可以分爲5個部分,分別是:
(1)類加載器
(2)運行時數據區
(3)執行引擎
(4)本地庫接口
(5)本地方法庫
其基本流程爲:
在這裏插入圖片描述
運行時數據區中的程序計數器、虛擬機棧、本地方法棧、堆、方法區;前三個是線程私有的,後兩個是線程共享的;

類加載器:
加載字節碼文件到內存;

執行引擎:
對JVM指令進行解析,翻譯成機器碼,解析完成後提交到操作系統中;

本地庫接口:
供java調用的融合了不同開發語言的原生庫;

本地方法庫:
Java本地方法的具體實現;

運行時數據區:
JVM核心內存空間結構模型;其中各個組成部分各有各的用途;

(1)方法區:
存儲虛擬機加載的類信息、常量、靜態變量,即時器編譯後的代碼等數據。

(2)本地方法棧:
本地方法棧與java棧的作用和原理基本相同,都可以用來執行方法,不同觀點在於java棧執行的是java方法,本地方法棧執行的是本地方法;
本地方法:Java是基於應用層的高級編程語言,無法訪問操作系統底層 信息,如:底層硬件設備等,這個時候就需要使用其它語言來完成功能了,比如C語言;

(3)程序計數器:
程序計數器佔用的內存空間較小,是當前線程所執行的字節碼行號指示器,通過改變這個計算器的值來選取下一條需要執行的字節碼指令;多個線程之間的線程計算器相互獨立,互不影響;

(4)Java堆
用來存放實例化對象,java堆被所有線程共享,在虛擬機啓動時創建,用來存放對象實例;

(5)虛擬機棧
其是Java方法執行的內存模型,java棧中存放的是多個棧幀,每個棧幀對應一個被調用的方法,主要包括局部變量表、操作數棧、動態鏈接、方法返回地址(方法出口)。每一個方法的執行,JVM都會創建一個棧幀,並將棧幀壓入java棧,方法執行完畢,該棧幀出棧;
如圖:
在這裏插入圖片描述
每個線程都有自己的java棧,相互獨立,可以同時執行各種的方法,每個方法的執行都是一個棧幀的入棧和出棧過程,java虛擬機棧用來存儲棧幀,方法調用結束之後,就會被銷燬;

發佈了53 篇原創文章 · 獲贊 2 · 訪問量 3010
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章