我们知道在java的伪共享概念中,“共享”的最小内存区域大小就是一个cache line。当两个以上CPU都要访问同一个cache line大小的内存区域时,就会引起冲突。
因此我们通常采用填充的办法,解决cache line 带来的速度慢的问题。
问题:
如何查看自己的HotSpot JVM的缓存行cache line的大小呢?我知道默认的是64字节,但是不同机子还是不一样的。
阿神2017-04-18 09:23:00
이 캐시 라인 크기는 CPU와 밀접한 관련이 있습니다. jdk는 그러한 API를 제공하지 않습니다.
Windows 시스템은 어떤지 모르겠습니다. Linux 시스템에서는 /sys/devices/system/cpu/cpu0/cache/
디렉터리
그 중 coherency_line_size는 캐시 라인 크기를 기록합니다.
명령줄에서 `getconf LEVEL1_DCACHE_LINESIZE
64`를 통해 얻을 수도 있습니다.
Java 프로그램이 실행 중일 때 이 번호를 얻으려면 지금 생각할 수 있는 것은 프로그램이 이 번호를 얻기 시작할 때 셸을 동적으로 실행하거나 파일을 보는 것입니다. 그런 다음 이 번호를 시스템 속성에 설정하면 나중에 꺼내서 사용할 수 있습니다.