我们知道在java的伪共享概念中,“共享”的最小内存区域大小就是一个cache line。当两个以上CPU都要访问同一个cache line大小的内存区域时,就会引起冲突。因此我们通常采用填充的办法,解决cache line 带来的速度慢的问题。
问题:如何查看自己的HotSpot JVM的缓存行cache line的大小呢?我知道默认的是64字节,但是不同机子还是不一样的。
闭关修行中......
このキャッシュ ライン サイズは CPU と密接に関係しています。 jdk はそのような API を提供しません。 Windows システムがどのようなものなのかはわかりませんが、Linux システムでは、/sys/devices/system/cpu/cpu0/cache/ ディレクトリにこれらのファイルがあります
/sys/devices/system/cpu/cpu0/cache/
このうち、coherency_line_sizeはキャッシュラインのサイズを記録します。
コマンドラインで「getconf LEVEL1_DCACHE_LINESIZE64」を使用して取得することもできます。
Java プログラムの実行中にこの番号を取得したい場合、プログラムの開始時に動的にシェルを実行するか、ファイルを表示してこの番号を取得することが考えられます。次に、この番号をシステム プロパティに設定します。これは後で取り出して使用できます。
コマンドラインで jvisualvm を開いて確認してください。
jvisualvm
このキャッシュ ライン サイズは CPU と密接に関係しています。 jdk はそのような API を提供しません。
。 リーリーWindows システムがどのようなものなのかはわかりませんが、Linux システムでは、
/sys/devices/system/cpu/cpu0/cache/
ディレクトリにこれらのファイルがありますこのうち、coherency_line_sizeはキャッシュラインのサイズを記録します。
コマンドラインで「getconf LEVEL1_DCACHE_LINESIZE
64」を使用して取得することもできます。
Java プログラムの実行中にこの番号を取得したい場合、プログラムの開始時に動的にシェルを実行するか、ファイルを表示してこの番号を取得することが考えられます。次に、この番号をシステム プロパティに設定します。これは後で取り出して使用できます。
コマンドラインで
jvisualvm
を開いて確認してください。