如何检查对象是否在CPU缓存中?

时间:2012-06-16 17:05:21

标签: java caching cache-control low-level cpu-cache

java中是否有办法检查特定对象是否在CPU缓存中?有没有办法测试读/写其中一个字段是否会导致缓存未命中?

我过去编写过java程序,但不是复杂程序,现在我必须在java中做一些学术研究。

如果这是不可能的,有没有一种通用的方法来模拟这种事情? 这在低级编程中是否可行,例如C?

2 个答案:

答案 0 :(得分:6)

TL; DR - 否

在Java中,JVM使您免受CPU的攻击,因此这种低级别信息在设计上不会暴露给程序。

此外,即使您使用较低级别的语言(例如C)并使用了一些程序集级别的黑客攻击,我也很难想象您可以从哪里获得有关缓存状态的有意义数据,原因如下:缓存是动态的 - 新数据不断加载到其中,并且(较旧的)数据不断从其中刷新。在每个给定的时刻,你有几个进程在你的CPU上运行,每个进程产生至少一个线程(可能更多) - 所有这些线程的组合活动影响缓存和存储在其中的数据。

因此,即使你能得到is object X in cache问题的答案答案,那么这个答案在你得到答案的那一刻就会过时。

答案 1 :(得分:0)

正如其他人已经说过的那样:没有。

即使您可以在缓存中查询特定数据,也无法确定整个对象是否在缓存中,因为在如此低的级别上没有这样的概念。