1

我正在尝试测试一些队列插入和对象时间戳的删除。经过几次测试运行后,我在相同代码上的结果显着提高了 80 倍。这显然是 JVM 或 hardware\cpu 缓存的缓存结果,但我希望每次运行都能获得新的结果。

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

4

2 回答 2

6

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

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

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

于 2013-02-17T08:09:28.227 回答
0

如果你想设计一个微基准,我建议使用 JMH。

它是“最”的微基准测试框架,它将负责 JIT 预热、死代码消除等。它还对包括 Linux Perf 在内的各种分析器提供开箱即用的支持。

https://www.baeldung.com/java-microbenchmark-harness

https://github.com/openjdk/jmh

于 2022-01-13T07:21:21.283 回答