有没有在java中检查某个特定对象是否在CPU缓存中的方法?有没有一种方法可以测试是否读取/写入其中一个字段会导致缓存未命中?如何检查一个对象是否在CPU缓存中?
我过去写过java程序,但不是很复杂,现在我不得不在java中做一些学术研究。
如果这是不可能的,有没有一种通用的方法来模拟这种事情? 这是可能的低级编程,如C?
有没有在java中检查某个特定对象是否在CPU缓存中的方法?有没有一种方法可以测试是否读取/写入其中一个字段会导致缓存未命中?如何检查一个对象是否在CPU缓存中?
我过去写过java程序,但不是很复杂,现在我不得不在java中做一些学术研究。
如果这是不可能的,有没有一种通用的方法来模拟这种事情? 这是可能的低级编程,如C?
TL; DR - 无
在Java的JVM屏蔽从CPU所以这种低层次的信息,通过设计,不暴露在节目。而且,即使你使用低级语言(例如C)并且使用了一些汇编级别的黑客,我也很难想象你可以从哪里获得有关缓存状态的有意义的数据,原因如下:缓存是动态的 - 不断加载新数据,并且(旧的)数据不断从中刷新。在每个给定的时刻,你有几个进程在你的CPU上运行,每个进程至少产生一个线程(可能多于此线程) - 所有这些线程的组合活动都会影响缓存和存储在其中的数据。
因此,即使你能得到问题is object X in cache
的Y/N答案,那么这个答案将在你得到它的时候过时。
正如其他人已经说过的:不。
即使您可以查询缓存中的特定数据,它们也不知道整个对象是否在缓存中,因为在这么低的级别上没有这样的概念。
Java程序全部运行在虚拟机中...所以简单地说,不。 – Brendan
如果有办法做到这一点,我会非常震惊。这样的细节应该从程序员那里隐藏起来...... –
我不确定这甚至可能在C甚至汇编中。任何“检查”地址的尝试都会自动将其放入缓存中。 – Mysticial