大型o2o網(wǎng)站開(kāi)發(fā)時(shí)間怎么建造自己的網(wǎng)站
一:為什么要有JMM,它為什么出現(xiàn)?
CPU的運(yùn)行并不是直接操作內(nèi)存而是先把內(nèi)存里面的數(shù)據(jù)讀到緩存,而內(nèi)存的讀和寫(xiě)操作的時(shí)候會(huì)造成不一致的問(wèn)題。JVM規(guī)范中試圖定義一種Java內(nèi)存模型來(lái)屏蔽掉各種硬件和操作系統(tǒng)的內(nèi)存訪(fǎng)問(wèn)差異,以實(shí)現(xiàn)讓Java程序再各種平臺(tái)下都能達(dá)到一致性的內(nèi)存訪(fǎng)問(wèn)效果。
二:JMM是什么?
JMM本身是一種抽象的概念并不真實(shí)存在,它僅僅描述的是一組約定或規(guī)范,通過(guò)這組規(guī)范定義了程序中(尤其是多線(xiàn)程)各個(gè)變量的讀寫(xiě)訪(fǎng)問(wèn)方式并決定一個(gè)線(xiàn)程對(duì)共享變量的寫(xiě)入以及如何變成對(duì)另一個(gè)線(xiàn)程可見(jiàn),
三:JMM作用和功能是什么?
1:通過(guò)JMM來(lái)實(shí)現(xiàn)線(xiàn)程和主內(nèi)存之間的抽象關(guān)系
2:屏蔽各個(gè)硬件平臺(tái)和操作系統(tǒng)的內(nèi)存訪(fǎng)問(wèn)差異以實(shí)現(xiàn)讓Java程序在各種平臺(tái)下都能達(dá)到一致性的內(nèi)存訪(fǎng)問(wèn)效果。
四:JMM規(guī)范下三大特性
1:可見(jiàn)性:是指當(dāng)一個(gè)線(xiàn)程修改了某一個(gè)共享變量的值,其他線(xiàn)程是否能夠立即知道該變更,JMM規(guī)定了所有的變量都存儲(chǔ)在主內(nèi)存
2:原子性:指一個(gè)操作是不可被打斷的
3:有序性:編譯器和處理器通常會(huì)對(duì)指令序列進(jìn)行重新排序。多線(xiàn)程環(huán)境中線(xiàn)程交替執(zhí)行,由于編譯器優(yōu)化重排的存在,可能出現(xiàn)亂序現(xiàn)象,兩個(gè)線(xiàn)程使用的變量能否保證一致性是無(wú)法確定的,結(jié)果無(wú)法預(yù)測(cè)。
五:JMM規(guī)范下多線(xiàn)程先行發(fā)生原則
1:如果一個(gè)操作happens-before另一個(gè)操作,那么第一個(gè)操作的執(zhí)行結(jié)果將對(duì)第二個(gè)操作可見(jiàn),而且第一個(gè)操作的執(zhí)行順序排在第二個(gè)操作之前。
2:如果兩個(gè)操作之間存在happens-before關(guān)系,并不意味著一定要按照happens-before原則制定的順序來(lái)執(zhí)行。如果重排之后的執(zhí)行結(jié)果與按照happens-before關(guān)系來(lái)執(zhí)行的結(jié)果一致,那么這種重排序并不非法。