java - 怎么看自己的JVM中cache line是多少字节的?

 慈悲的残忍 发布于 2022-10-29 09:59

我们知道在java的伪共享概念中,“共享”的最小内存区域大小就是一个cache line。当两个以上CPU都要访问同一个cache line大小的内存区域时,就会引起冲突。
因此我们通常采用填充的办法,解决cache line 带来的速度慢的问题。

问题:
如何查看自己的HotSpot JVM的缓存行cache line的大小呢?我知道默认的是64字节,但是不同机子还是不一样的。

2 个回答
  • 试试在命令行打开jvisualvm看看。

    2022-10-30 16:32 回答
  • 这个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里,之后可以取出来用。

    2022-10-30 16:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有