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

disho6za  于 2022-11-07  发布在  Java
关注(0)|答案(2)|浏览(211)

我正在测试一些队列插入和对象时间戳移除。经过几次测试运行后,我在相同代码上的加速比提高了80倍。这看起来很明显是JVM或硬件\CPU缓存的缓存结果,但我希望每次运行都能得到新的结果。
是否有一种方法可以从Java代码中以编程方式\清除这两个缓存?

kh212irz

kh212irz1#

这可能是由于JIT的作用。JIT会在运行一定次数后将字节码编译为机器码,以使其更有效。
您可以通过设置-XX:CompileThreshold选项(默认值为10,000)或excluding your class from being optimised at all来更改方法优化前的调用次数。
然而,我不知道为什么你会想禁用编译器,并迫使您的程序运行得更慢。

iqxoj9l9

iqxoj9l92#

如果你想设计一个微基准测试,我建议使用JMH。
它是一个微基准测试框架,它将负责JIT预热、死代码消除等。它还对包括Linux Perf在内的各种分析器提供开箱即用的支持。
https://www.baeldung.com/java-microbenchmark-harness
https://github.com/openjdk/jmh

相关问题