gpt4 book ai didi

java - 计算为 Java 代码执行的字节码的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:49 24 4
gpt4 key购买 nike

我试图获取各种 Java 程序的计时数据。然后我不得不根据这个时序数据进行一些回归分析。以下是我用来获取时序数据的两种方法:

  • System.currentTimeMillis():我最初使用它,但我希望同一程序多次运行时计时数据保持不变次。在这种情况下,变化很大。当两个实例的同样的代码并行执行,差异更大。所以我放弃了这个并开始寻找一些分析器。
  • -XX countBytecodes Flag in Hotspot JVM:由于时序数据的变化很大,我想到了在执行这段代码时测量执行的字节码数。当同一个程序被执行多次时,这应该给出一个更静态的计数。但这也有变化。当程序按顺序执行时,变化很小,但在并行运行相同代码时,变化很大。我也尝试使用 -Xint 进行编译,但结果是相似的。

所以我正在寻找一些分析器,它可以为我提供执行代码时执行的字节代码的计数。在同一程序的运行中,计数应保持不变(或相关性接近 1)。或者,如果我可以根据其他一些指标获取时序数据,这些指标在多次运行中应该几乎保持不变。

最佳答案

I wanted the timing data to be constant when the same program was run multiple times

这在真机上是不可能的,除非它是为硬实时系统设计的,而你的机器几乎肯定不是。

I am looking for some profiler that could give me the count of byte codes executed when a code is executed.

假设你能做到这一点,那证明不了什么。例如,您不会看到 ++% 便宜 90 倍,具体取决于您运行它的硬件。您将无法看到 if 的分支未命中比推测分支的代价高出 100 倍。您将看不到触发 TLB 未命中的对内存区域的内存访问比复制 4 KB 数据的成本更高。

if there could be some other metric based on which I could get timing data, which should stay almost constant across multiple runs.

可以多次运行,取平均值。这将隐藏任何高结果/异常值,并让您对吞吐量有一个有利的了解。如果运行时间足够长,它可以是给定机器的可重现数字。

关于java - 计算为 Java 代码执行的字节码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com