日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
java內(nèi)存模型包含什么內(nèi)容
Java內(nèi)存模型(JMM)是一種抽象的概念,它描述的一組規(guī)則或者規(guī)范,定義了程序中各個(gè)變量的訪問(wèn)方式。JMM主要解決了多線程環(huán)境中的可見性問(wèn)題,即當(dāng)一個(gè)共享變量被一個(gè)線程修改后,其他線程何時(shí)能看見該變化。除了解決可見性問(wèn)題,JMM還屏蔽如果是各種硬件和操作系統(tǒng)還有就是內(nèi)存模型的內(nèi)存訪問(wèn)差異,以實(shí)現(xiàn)讓Java程序在各種,平臺(tái)下都能達(dá)到一致效果 比如說(shuō):程序計(jì)數(shù)器這一類的硬件資源。 故其內(nèi)容可概括繼發(fā)性包括:定義黎明的規(guī)則、解決可見

Java內(nèi)存模型(Java Memory Model,JMM)是Java虛擬機(jī)規(guī)范中定義的一個(gè)概念模型,它描述了Java程序在多線程環(huán)境下如何和何時(shí)看到其他線程寫入的值,以及如何同步訪問(wèn)共享變量,Java內(nèi)存模型規(guī)定了主內(nèi)存和每個(gè)線程的本地內(nèi)存之間的關(guān)系,以及它們之間的交互操作。

創(chuàng)新互聯(lián)建站是一家專業(yè)從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站設(shè)計(jì)公司,創(chuàng)新互聯(lián)建站依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!

主內(nèi)存與工作內(nèi)存

Java內(nèi)存模型將內(nèi)存劃分為兩種:主內(nèi)存和工作內(nèi)存,所有的變量都存儲(chǔ)在主內(nèi)存中,每個(gè)線程都有自己的工作內(nèi)存,線程的工作內(nèi)存中保存了被該線程使用到的變量的主內(nèi)存副本拷貝,線程對(duì)變量的所有操作都必須在工作內(nèi)存中進(jìn)行,然后再將變量寫回主內(nèi)存,不同的線程之間無(wú)法直接訪問(wèn)對(duì)方工作內(nèi)存中的變量,線程間變量的傳遞均需要通過(guò)主內(nèi)存來(lái)完成。

內(nèi)存間的交互操作

Java內(nèi)存模型定義了8種操作來(lái)完成變量在主內(nèi)存和工作內(nèi)存之間的交互過(guò)程:

1、lock(鎖定):把一個(gè)變量標(biāo)識(shí)為一條線程獨(dú)占的狀態(tài)。

2、unlock(解鎖):把一個(gè)處于鎖定狀態(tài)的變量釋放出來(lái),讓其他線程也能訪問(wèn)。

3、read(讀取):把一個(gè)變量的值從主內(nèi)存?zhèn)鬏數(shù)焦ぷ鲀?nèi)存中,以便隨后的load操作。

4、load(加載):把read操作從主內(nèi)存中得到的變量值放入工作內(nèi)存的變量副本中。

5、use(使用):把工作內(nèi)存中的一個(gè)變量的值傳遞給執(zhí)行引擎,每當(dāng)虛擬機(jī)遇到一個(gè)需要使用變量的值的字節(jié)碼指令時(shí)將會(huì)執(zhí)行這個(gè)操作。

6、assign(賦值):把一個(gè)從執(zhí)行引擎接收到的值賦給工作內(nèi)存的變量,每當(dāng)虛擬機(jī)遇到一個(gè)給變量賦值的字節(jié)碼指令時(shí)將會(huì)執(zhí)行這個(gè)操作。

7、store(存儲(chǔ)):把工作內(nèi)存中的一個(gè)變量的值傳送到主內(nèi)存中,以便隨后的write操作。

8、write(寫入):把store操作從工作內(nèi)存中得到的變量的值放入主內(nèi)存的變量中。

原子性、可見性和有序性

Java內(nèi)存模型為程序員提供了以下三個(gè)保證:

1、原子性:即一個(gè)操作或者多個(gè)操作要么全部執(zhí)行并且執(zhí)行的過(guò)程不會(huì)被任何因素打斷,要么就都不執(zhí)行。

2、可見性:指當(dāng)一個(gè)線程修改了一個(gè)共享變量的值,新值對(duì)于其他線程來(lái)說(shuō)是可以立即得知的。

3、有序性:即程序按照代碼的先后順序執(zhí)行。

先行發(fā)生原則

先行發(fā)生原則是指,如果兩個(gè)操作訪問(wèn)同一個(gè)變量,且第一個(gè)操作為寫操作,第二個(gè)操作為讀操作,那么第一個(gè)操作的結(jié)果將對(duì)第二個(gè)操作產(chǎn)生直接影響,線程A修改了一個(gè)共享變量的值,然后線程B讀取這個(gè)共享變量的值,那么線程B讀取到的值將是線程A剛剛寫入的值。

volatile關(guān)鍵字

volatile是一個(gè)類型修飾符,用于修飾被不同線程訪問(wèn)和修改的變量,它有以下兩個(gè)特性:

1、保證此變量對(duì)所有線程的可見性,即一旦有線程修改了這個(gè)變量的值,新值對(duì)于其他線程來(lái)說(shuō)是可以立即得知的。

2、禁止進(jìn)行指令重排序優(yōu)化,編譯器、運(yùn)行時(shí)和處理器會(huì)在合適的地方插入內(nèi)存屏障來(lái)禁止特定類型的數(shù)據(jù)重排序。

synchronized關(guān)鍵字

synchronized關(guān)鍵字用于實(shí)現(xiàn)同步訪問(wèn)共享資源,它可以保證同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼,從而保證數(shù)據(jù)的一致性,synchronized可以修飾方法和代碼塊,當(dāng)它用來(lái)修飾方法或者一個(gè)代碼塊時(shí),能夠鎖住整個(gè)對(duì)象或者類,鎖的范圍為整個(gè)方法或代碼塊;當(dāng)它用來(lái)修飾一個(gè)實(shí)例變量時(shí),鎖住的是這個(gè)實(shí)例變量所對(duì)應(yīng)的對(duì)象。

final關(guān)鍵字

final關(guān)鍵字可以用于修飾類、方法和變量,當(dāng)final修飾一個(gè)類時(shí),表示這個(gè)類不能被繼承;當(dāng)final修飾一個(gè)方法時(shí),表示這個(gè)方法不能被覆蓋重寫;當(dāng)final修飾一個(gè)基本類型或者引用類型時(shí),表示這個(gè)變量的值一旦賦值之后就不能被修改,final關(guān)鍵字可以提高性能,因?yàn)榫幾g器在處理帶final關(guān)鍵字的方法或者類時(shí)會(huì)進(jìn)行一些優(yōu)化。

問(wèn)題與解答

Q1:Java內(nèi)存模型中的主內(nèi)存和工作內(nèi)存有什么區(qū)別?

A1:主內(nèi)存是所有變量存儲(chǔ)的地方,而每個(gè)線程都有自己的工作內(nèi)存,其中保存了被該線程使用到的變量的主內(nèi)存副本拷貝,線程對(duì)變量的所有操作都必須在工作內(nèi)存中進(jìn)行,然后再將變量寫回主內(nèi)存,不同的線程之間無(wú)法直接訪問(wèn)對(duì)方工作內(nèi)存中的變量,線程間變量的傳遞均需要通過(guò)主內(nèi)存來(lái)完成。

Q2:Java內(nèi)存模型中的8種操作是什么?它們的作用分別是什么?

A2:Java內(nèi)存模型中的8種操作分別是lock、unlock、read、load、use、assign、store和write,它們的作用如下:lock和unlock用于把一個(gè)變量標(biāo)識(shí)為一條線程獨(dú)占的狀態(tài);read和load用于把一個(gè)變量的值從主內(nèi)存?zhèn)鬏數(shù)焦ぷ鲀?nèi)存中;use用于把工作內(nèi)存中的一個(gè)變量的值傳遞給執(zhí)行引擎;assign用于把一個(gè)從執(zhí)行引擎接收到的值賦給工作內(nèi)存的變量;store和write用于把工作內(nèi)存中的一個(gè)變量的值傳送到主內(nèi)存中。


當(dāng)前文章:java內(nèi)存模型包含什么內(nèi)容
本文地址:http://m.5511xx.com/article/djegphd.html