溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JVM運行時數(shù)據(jù)區(qū)的示例分析

發(fā)布時間:2022-01-14 13:43:11 來源:億速云 閱讀:119 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下JVM運行時數(shù)據(jù)區(qū)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、內(nèi)存與線程

1、內(nèi)存結(jié)構(gòu)

內(nèi)存是計算機的重要部件之一,它是外存與CPU進行溝通的橋梁,計算機中所有程序的運行都在內(nèi)存中進行,內(nèi)存性能的強弱影響計算機整體發(fā)揮的水平。JVM的內(nèi)存結(jié)構(gòu)規(guī)定Java程序在執(zhí)行時內(nèi)存的申請、劃分、使用、回收的管理策略,通說來說JVM的內(nèi)存管理指運行時數(shù)據(jù)區(qū)這一大塊的管理。

JVM運行時數(shù)據(jù)區(qū)的示例分析

2、線程運行

JVM中一個應(yīng)用是可以有多個線程并行執(zhí)行,線程被一對一映射為服務(wù)所在操作系統(tǒng)線程,調(diào)度在可用的CPU上執(zhí)行,啟動時會創(chuàng)建一個操作系統(tǒng)線程;當該線程終止時,這個操作系統(tǒng)線程也會被回收。

在虛擬機啟動運行時,會創(chuàng)建多個線程,數(shù)據(jù)區(qū)中有的模塊是線程共享的,有的是線程私有的:

JVM運行時數(shù)據(jù)區(qū)的示例分析

線程共享:元數(shù)據(jù)區(qū)、堆Heap;

線程私有:虛擬機棧、本地方法棧、程序計數(shù)器;

單個CPU在特定時刻只能執(zhí)行一個線程,所以多線程通過幾塊空間的使用,然后不斷的爭搶CPU的執(zhí)行時間段。

二、元數(shù)據(jù)空間

基本描述

方法元空間(方法區(qū))在JVM啟動的時候被創(chuàng)建,是被各個線程共享的內(nèi)存空間,用于存放類和方法的元數(shù)據(jù)以及常量池,比如Class和Method。

在實際的開發(fā)中,經(jīng)常因為加載的類太多,進而導致內(nèi)存溢出問題,這樣可以對元空間的大小進行擴展。

與堆的關(guān)系

元空間存放加載的類信息,當類被實例化時,堆中存儲實例化的對象信息,并且通過對象類型數(shù)據(jù)的指針找到類。

三、堆空間

基本描述

JVM啟動時創(chuàng)建堆區(qū),是內(nèi)存管理的核心區(qū),通常情況下也是最大的內(nèi)存空間,是被所有線程共享的,幾乎所有的對象實例都要在堆中分配內(nèi)存,所以這里也是垃圾回收的重點空間。

堆棧關(guān)系

JVM運行時數(shù)據(jù)區(qū)的示例分析

棧是JVM運行時的單位,堆是存儲單位,當棧中方法結(jié)束,相關(guān)對象失去所有引用后,不會馬上被移除堆空間,要等到垃圾收集器運行的時候。

四、虛擬機棧

虛擬機棧(Java棧)在每個線程創(chuàng)建時都會生成一個虛擬機棧,棧的內(nèi)部是一個個棧幀單元,對應(yīng)Java方法的調(diào)用,其生命周期和線程周期保持一致。用來存儲方法的局部遍歷,部分執(zhí)行結(jié)果,方法的調(diào)用和返回。

棧幀是方法執(zhí)行的數(shù)據(jù)集,維持執(zhí)行過程中的各種數(shù)據(jù)信息,執(zhí)行的方法依次入棧,棧頂存放當前要執(zhí)行的方法,執(zhí)行結(jié)束后出棧,對于棧沒有垃圾回收問題。

五、程序計數(shù)器

基本描述

JVM中程序計數(shù)寄存器用來存儲下一條將要執(zhí)行指令的地址,執(zhí)行引擎獲取到指令后進行執(zhí)行,是線程私有的。它可以看作是當前線程所執(zhí)行的字節(jié)碼的行號指示器。

JVM運行時數(shù)據(jù)區(qū)的示例分析

前后關(guān)系

線程在獲取CPU的時間段內(nèi)執(zhí)行代碼,但是線程隨時可能沒有執(zhí)行完就被掛起,等到線程A再次獲取CPU執(zhí)行時,CPU 得知道執(zhí)行到線程A的哪一個指令,程序計數(shù)器會存儲該動作。

六、本地方法棧

本地方法棧與虛擬機棧所起到的作用是類似的,虛擬機棧為虛擬機執(zhí)行Java方法,本地方法棧管理虛擬機使用到的 本地方法,在虛擬機規(guī)范中對本地方法棧中方法使用的語言、使用方式與數(shù)據(jù)結(jié)構(gòu)并沒有強制規(guī)定,因此具體的虛擬機可以自由實現(xiàn)它。HotSpot虛擬機直接就把本地方法棧和虛擬機棧合二為一。

以上是“JVM運行時數(shù)據(jù)區(qū)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

jvm
AI