我们知道在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
을 열어 확인해 보세요.