我正在尝试测试一些队列插入和删除对象的时间戳。经过几次测试后,我在同一代码上的速度提升了80倍。这看起来很明显是JVM或硬件\ cpu缓存的缓存结果,但我希望每次运行都能得到新的结果。
有没有办法从Java代码中以编程方式清除这两个缓存中的任何一个?
答案 0 :(得分:5)
这可能是由于JIT的开始。在一定次数的运行后,JIT会将你的字节码编译成机器码,以提高效率。
您可以通过设置-XX:CompileThreshold
选项(默认值为10,000)或excluding your class from being optimised at all来更改方法优化前的通话次数。
但是我不确定你为什么要禁用编译器并强制程序运行得更慢。