以编程方式清除Java\CPU缓存

sha*_*del 2 java testing junit caching jvm

我试图测试一些队列插入和删除对象时间戳.经过几次测试后,我在同一代码上的速度提升了80倍.这看起来很明显是JVM或硬件\ cpu缓存的缓存结果,但我希望每次运行都能得到新的结果.

有没有办法从Java代码中以编程方式清除这两个缓存中的任何一个?

ass*_*ias 5

这可能是由于JIT的推出.在一定次数的运行之后,JIT会将您的字节码编译为机器代码,以提高效率.

您可以通过设置-XX:CompileThreshold选项(默认值为10,000)或排除您的类完全优化来更改方法优化之前的调用次数.

但是我不确定为什么要禁用编译器并强制程序运行得更慢.

  • 或者他可以完全关闭JIT编译器......虽然这样做意味着他将以不切实际的方式测量运行的代码.这些数字可能并不代表真实的表现. (2认同)