0

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

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

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

4

2 回答 2

7

TL;DR - 没有

在 Java 中,JVM 将您与 CPU 隔离开来,因此这种低级信息在设计上不会暴露给程序。

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

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

于 2012-06-16T17:20:39.210 回答
0

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

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

于 2012-06-16T17:29:38.110 回答