Java內(nèi)存模型的指令重排是什么-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)Java內(nèi)存模型的指令重排是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)建站 - 光華機(jī)房服務(wù)器托管,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽(yáng)服務(wù)器托管,德陽(yáng)服務(wù)器托管,遂寧服務(wù)器托管,綿陽(yáng)服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),光華機(jī)房服務(wù)器托管,西南服務(wù)器托管,四川/成都大帶寬,大帶寬服務(wù)器,四川老牌IDC服務(wù)商

JMM是內(nèi)存模型規(guī)范在Java語(yǔ)言中的體現(xiàn)。JMM保證了在多核CPU多線程編程環(huán)境下,對(duì)共享變量讀寫(xiě)的原子性、可見(jiàn)性和有序性。

指令重排

在說(shuō)有序性之前,我們必須先來(lái)聊下指令重排,因?yàn)槿绻麤](méi)有指令重拍的話,也就不存在有序性問(wèn)題了。

指令重排是指編譯器和處理器在不影響代碼單線程執(zhí)行結(jié)果的前提下,對(duì)源代碼的指令進(jìn)行重新排序執(zhí)行。這種重排序執(zhí)行是一種優(yōu)化手段,目的是為了處理器內(nèi)部的運(yùn)算單元能盡量被充分利用,提升程序的整體運(yùn)行效率。

重排序分為以下幾種:

編譯器優(yōu)化的重排序。

編譯器在不改變單線程程序語(yǔ)義的前提下,可以重新安排語(yǔ)句的執(zhí)行順序。

指令級(jí)并行的重排序。

現(xiàn)代處理器采用了指令級(jí)并行技術(shù)來(lái)將多條指令重疊執(zhí)行。如果不存在數(shù)據(jù)依賴性,處理器可以改變語(yǔ)句對(duì)應(yīng)機(jī)器指令的執(zhí)行順序。

內(nèi)存系統(tǒng)的重排序。

由于處理器使用緩存和讀/寫(xiě)緩沖區(qū),這使得加載和存儲(chǔ)操作看上去可能是在亂序執(zhí)行。

通過(guò)指令重排的定義可以看出:指令重拍只能保證單線程執(zhí)行下的正確性,在多線程環(huán)境下,指令重排會(huì)帶來(lái)一定的問(wèn)題(一個(gè)硬幣具有兩面性,指令重排帶來(lái)性能提升的同時(shí)也增加了編程的復(fù)雜性)。下面我們就來(lái)展示一個(gè)列子,看看指令重排是怎么影響程序執(zhí)行結(jié)果的。

對(duì)于上面的代碼,假如我們開(kāi)啟一個(gè)線程調(diào)用startSystem,再開(kāi)啟一個(gè)線程不斷調(diào)用checkStartes方法,我們并不能保證代碼執(zhí)行到“關(guān)注點(diǎn)”處,var變量的值一定是3。因?yàn)樵趕tartSystem方法中的兩個(gè)賦值語(yǔ)句并不存在依賴關(guān)系,所以在編譯器進(jìn)行代碼編譯時(shí)可能進(jìn)行指令重排。

也就是先執(zhí)行started=true;執(zhí)行完這個(gè)語(yǔ)句后,線程立馬執(zhí)行checkStartes方法,此時(shí)value值還是1,那么最后在關(guān)注點(diǎn)處的var值就是2,而不是我們想象中的3。

以上就是Java內(nèi)存模型的指令重排是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞名稱:Java內(nèi)存模型的指令重排是什么-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://muchs.cn/article18/dpeidp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、虛擬主機(jī)、網(wǎng)站內(nèi)鏈動(dòng)態(tài)網(wǎng)站、App開(kāi)發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)