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