溫馨提示×

溫馨提示×

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

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

JVM內(nèi)存模型是什么

發(fā)布時間:2020-06-24 15:30:40 來源:億速云 閱讀:144 作者:元一 欄目:編程語言

這期內(nèi)容當(dāng)中的小編將會給大家?guī)碛嘘P(guān)JVM內(nèi)存模型的介紹,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。

引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。

計算機內(nèi)存模型

在程序運行時,CPU通過訪問主存獲取數(shù)據(jù),但隨著CPU的快速發(fā)展,CPU訪問速度越來越高,硬件無法滿足CPU的條件下,大多內(nèi)存加入了高速緩存機制,不同CPU都有對應(yīng)的多級(一般為三)緩存,CPU取數(shù)時會先按照一級緩存-二級緩存-三級緩存-主存的順序進(jìn)行訪問,提高了訪問速度,但同時不同的CPU的緩存內(nèi)的數(shù)據(jù)可能是不一樣的,造成CPU與主存不能實現(xiàn)數(shù)據(jù)同步

JAVA內(nèi)存模型

JAVA內(nèi)存模型(Java Memory Model,JMM)是符合計算機內(nèi)存模型規(guī)范的,通過設(shè)置內(nèi)存屏障,屏蔽了不同硬件和操作系統(tǒng)的訪問差異的,保證java程序在不同平臺都能做到對內(nèi)存的訪問效果一致的機制及規(guī)范。

五大內(nèi)存區(qū)域

1.堆

堆是虛擬機加載的最大的一部分內(nèi)存區(qū)域,用來存放對象實例,可以在不連續(xù)的內(nèi)存地址進(jìn)行存儲,只要邏輯地址連續(xù)即可。 分為新生代和老年代,新生代與老年代的比例為1:2(可以通過參數(shù) –XX:NewRatio 來指定)

2.程序計數(shù)器

每個線程都有程序計數(shù)器,程序計數(shù)器用來標(biāo)識當(dāng)前線程的程序字節(jié)碼的行號,java方法運行時,程序計數(shù)器保存的是字節(jié)碼文件的行號,native方法運行時,程序計數(shù)器的內(nèi)容為空,不同的線程擁有其專屬的程序計數(shù)器,為線程所私有

3.本地方法棧

與JAVA虛擬機棧作用相似,不同的是后者服務(wù)的是虛擬機運行的java方法(字節(jié)碼),本地方法棧服務(wù)的是虛擬機調(diào)用的native方法,即底層服務(wù),一般用C或C++編寫

4.JAVA虛擬機棧

每個方法在運行時都會創(chuàng)建一個棧幀,包括存儲局部變量表,操作棧,動態(tài)鏈接,方法出口等信息。每一個方法被調(diào)用的過程就對應(yīng)一個棧幀在虛擬機棧中從入棧到出棧的過程。

JAVA虛擬機棧主要用來存儲方法參數(shù),方法內(nèi)部的局部變量,編譯期間加載的數(shù)據(jù)類型和返回地址類型,為線程所私有

5.方法區(qū)

又稱為永久代,用來存放虛擬機加載的類信息,常量,靜態(tài)變量,是線程的共享區(qū)域,JDK8之后被廢棄,改用元空間

上述就是小編為大家分享的JVM內(nèi)存模型介紹,如果您也有類似的疑惑,不妨礙參照上述分析進(jìn)行理解。如果想了解更多相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊。

向AI問一下細(xì)節(jié)

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

AI