我們知道在java的偽共享概念中,“共享”的最小內(nèi)存區(qū)域大小就是一個(gè)cache line。當(dāng)兩個(gè)以上CPU都要訪問(wèn)同一個(gè)cache line大小的內(nèi)存區(qū)域時(shí),就會(huì)引起沖突。因此我們通常采用填充的辦法,解決cache line 帶來(lái)的速度慢的問(wèn)題。問(wèn)題:如何查看自己的HotSpot JVM的緩存行cache line的大小呢?我知道默認(rèn)的是64字節(jié),但是不同機(jī)子還是不一樣的。
2 回答

函數(shù)式編程
TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
這個(gè)cache line size與cpu息息相關(guān)。jdk也沒(méi)有提供這樣的api。
不知道windows系統(tǒng)是怎樣的,linux系統(tǒng)中,在/sys/devices/system/cpu/cpu0/cache/
目錄下有這些文件
coherency_line_size level number_of_sets physical_line_partitionshared_cpu_listshared_cpu_map size type ways_of_associativity
其中coherency_line_size記錄了cache line size。
在命令行下也可以通過(guò)`getconf LEVEL1_DCACHE_LINESIZE
64`來(lái)獲得。
要想在Java程序運(yùn)行時(shí)得到這個(gè)數(shù),現(xiàn)在能想到的就是在程序啟動(dòng)時(shí)先動(dòng)態(tài)執(zhí)行shell或查看文件,獲取這個(gè)數(shù)。然后把這個(gè)數(shù)set到system property里,之后可以取出來(lái)用。
添加回答
舉報(bào)
0/150
提交
取消