中文曰韩无码上欢|熟妇熟女一区二区视频在线播放|加勒比成人观看日韩无码网|911欧美久久911|AVAV一区二区三区|亚洲高清有码视频|亚洲日韩超碰亚洲A在线视频|日本高清不卡一二三区|1级毛片大全特黄片|亚洲BT视频在线观看

您好,歡迎來到易龍商務(wù)網(wǎng)!

java編程內(nèi)存模型與運(yùn)行時(shí)數(shù)據(jù)區(qū)類型

發(fā)布時(shí)間:2021-04-27 11:31  

【廣告】

java編程開發(fā)語言是目前大多數(shù)程序員都在學(xué)習(xí)的編程語言之一,而今天我們就一起來了解一下,java編程內(nèi)存模型與運(yùn)行時(shí)數(shù)據(jù)區(qū)類型。

1、JVM內(nèi)存模型

JVM內(nèi)存模型–Java虛擬機(jī)規(guī)范定義Java內(nèi)存模型,嘗試*掉各種硬件和操作系統(tǒng)的訪問差異;–JVM內(nèi)存模型的目標(biāo):定義程序中各個(gè)變量的訪問規(guī)則,即在虛擬機(jī)中將變量存儲(chǔ)到內(nèi)存和從內(nèi)存取出來這樣的細(xì)節(jié);–volatile關(guān)鍵字:當(dāng)一個(gè)變量用volatile關(guān)鍵字限定后,會(huì)有兩個(gè)語義:(1)當(dāng)這個(gè)變量的值被修改后,會(huì)立即刷新到主內(nèi)存中,對(duì)其他線程可見;當(dāng)某個(gè)線程讀取這個(gè)變量的時(shí)候,也會(huì)重新將主內(nèi)存中的數(shù)據(jù)刷一份到工作內(nèi)存中來。

但是,如果多線程操作這個(gè)變量的計(jì)算中,后一個(gè)值依賴前一個(gè)值,就還是會(huì)有并發(fā)問題,說明volatile不具備原子性;(2)禁止指令重排優(yōu)化,觀察voatile變量對(duì)應(yīng)的字節(jié)碼文件,會(huì)發(fā)現(xiàn)變量的操作指令后面加了一句lockaddl$0x0,(%esp)的操作,這個(gè)操作相當(dāng)于一個(gè)內(nèi)存屏障。

–synchronized關(guān)鍵字:當(dāng)一個(gè)線程對(duì)一個(gè)變量加鎖的時(shí)候,就會(huì)清空這個(gè)變量在當(dāng)前工作內(nèi)存中的值,因此該關(guān)鍵字同時(shí)滿足了可見性和原子性。

2、Java運(yùn)行時(shí)數(shù)據(jù)區(qū)

Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)–程序計(jì)數(shù)器(PC):Java線程私有,類似于操作系統(tǒng)里的PC計(jì)數(shù)器,用于指定下一條需要執(zhí)行的字節(jié)碼的地址;–Java虛擬機(jī)棧:Java線程私有,虛擬機(jī)展描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行的時(shí)候,都會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量、操作數(shù)、動(dòng)態(tài)鏈接、方法出口等信息;每個(gè)方法調(diào)用都意味著一個(gè)棧幀在虛擬機(jī)棧中入棧到出棧的過程;

–本地方法棧:和Java虛擬機(jī)棧的作用類似,區(qū)別是該該區(qū)域?yàn)镴VM調(diào)用到的本地方法服務(wù);–堆(Heap):所有線程共享的一塊區(qū)域,垃圾收集器管理的主要區(qū)域。

目前主要的垃圾回收算法都是分代收集,因此該區(qū)域還可以細(xì)分為如下區(qū)域:–年輕代–Eden空間–FromSurvivor空間1,F(xiàn)romSurvivor空間2,用于存儲(chǔ)在Younggc過程中幸存的對(duì)象;

–老年代–方法區(qū):各個(gè)線程共享的一個(gè)區(qū)域,用于存儲(chǔ)虛擬機(jī)加載的類信息、常量、靜態(tài)變量等信息;–運(yùn)行時(shí)常量池:方法區(qū)的一部分,用于存放編譯器生成的各種字面量和符號(hào)引用;