簡體   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