我们知道在java的伪共享概念中,“共享”的最小内存区域大小就是一个cache line。当两个以上CPU都要访问同一个cache line大小的内存区域时,就会引起冲突。
因此我们通常采用填充的办法,解决cache line 带来的速度慢的问题。
问题:
如何查看自己的HotSpot JVM的缓存行cache line的大小呢?我知道默认的是64字节,但是不同机子还是不一样的。
阿神2017-04-18 09:23:00
這個cache line size與cpu息息相關。 jdk也沒有提供這樣的api。
不知道windows系統是怎麼樣的,linux系統中,在/sys/devices/system/cpu/cpu0/cache/
目錄下有這些檔案
coherency_line_size
level
number_of_sets
physical_line_partition
shared_cpu_list
shared_cpu_map
size
type
ways_of_associativity
其中coherency_line_size記錄了cache line size。
在命令列下也可以透過`getconf LEVEL1_DCACHE_LINESIZE
64`來取得。
要想在Java程式執行時得到這個數,現在能想到的就是在程式啟動時先動態執行shell或檢視文件,取得這個數。然後把這個數set到system property裡,之後可以取出來用。