java語(yǔ)言定義的關(guān)鍵字 volatile關(guān)鍵字在Java中有什么作用?
volatile關(guān)鍵字在Java中有什么作用?Volatile是為了防止指令重排序以確??梢娦詫?duì)于JVM級(jí)別,它是為了防止編譯器重排序同時(shí),對(duì)于某些CPU,它們會(huì)通過(guò)緩存鎖或線程來(lái)解決緩存可見性但是,
volatile關(guān)鍵字在Java中有什么作用?
Volatile是為了防止指令重排序以確??梢娦?/p>
對(duì)于JVM級(jí)別,它是為了防止編譯器重排序
同時(shí),對(duì)于某些CPU,它們會(huì)通過(guò)緩存鎖或線程來(lái)解決緩存可見性
但是,目前很多CPU已經(jīng)過(guò)優(yōu)化,因?yàn)榫彺嬉恢滦訫ESI會(huì)帶來(lái)性能開銷,因此使用storebuffer機(jī)制來(lái)進(jìn)行異步處理,而這種機(jī)制會(huì)導(dǎo)致指令的無(wú)序執(zhí)行。這會(huì)導(dǎo)致可見性問(wèn)題。
然后volatile將在CPU級(jí)別增加內(nèi)存屏障,以解決由CPU無(wú)序執(zhí)行引起的可見性問(wèn)題