java中有没有办法检查特定对象是否在CPU缓存中?有没有办法测试读取/写入其中一个字段是否会导致缓存未命中?
过去我写过java程序,但不复杂,现在我必须在java方面做一些学术研究。
如果这是不可能的,是否有一种通用的方法来模拟这种事情?这在诸如 C 之类的低级编程中是否可能?
java中有没有办法检查特定对象是否在CPU缓存中?有没有办法测试读取/写入其中一个字段是否会导致缓存未命中?
过去我写过java程序,但不复杂,现在我必须在java方面做一些学术研究。
如果这是不可能的,是否有一种通用的方法来模拟这种事情?这在诸如 C 之类的低级编程中是否可能?
TL;DR - 没有
在 Java 中,JVM 将您与 CPU 隔离开来,因此这种低级信息在设计上不会暴露给程序。
此外,即使您使用较低级别的语言(例如,C)并使用了一些汇编级别的技巧,我也很难想象您可以从哪里获得有关缓存状态的有意义的数据,原因如下:缓存是动态的 - 新数据是不断地加载到其中,并且(较旧的)数据不断地从其中刷新。在每个给定的时刻,您都有几个进程在 CPU 上运行,每个进程都产生至少一个线程(可能不止一个)——所有这些线程的组合活动会影响缓存和存储在其中的数据。
因此,即使你能得到一个 Y/N 的答案,is object X in cache
那么这个答案在你得到它的那一刻就会过时。
正如其他人已经说过的那样:不。
即使您可以查询缓存中的特定数据,也无法确定整个对象是否在缓存中,因为在如此低的级别上没有这样的概念。