繁体   English   中英

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

[英]clearing Java\CPU cache programmatically

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

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

这可能是由于JIT介入所致。JIT将在运行一定次数后将您的字节码编译为机器代码,以使其效率更高。

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

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

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

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

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

https://github.com/openjdk/jmh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM