我试图获取各种Java程序的计时数据。然后我不得不根据这个时间数据进行一些回归分析。以下是我用来获取时序数据的两种方法:
-Xint
进行编译,但结果相似。所以我正在寻找一些可以给我执行代码时执行的字节代码计数器的分析器。在同一程序的运行中,计数应保持不变(或相关性接近1)。或者,如果可能存在其他一些指标,我可以根据这些指标获得时间数据,这些数据应该在多次运行中几乎保持不变。
答案 0 :(得分:4)
我希望当同一个程序多次运行时,时序数据是恒定的
这在真机上是不可能的,除非它是专为硬实时系统设计的,你的机器几乎肯定不会。
我正在寻找一些可以给我执行代码时执行的字节代码计数器的分析器。
假设你可以做到这一点,那就不会有任何证据。例如,++
比%
便宜90倍,具体取决于您运行它的硬件。您将无法看到if
的分支未命中比推测分支贵100倍。您将无法看到对触发TLB未命中的内存区域的内存访问比复制4 KB数据更昂贵。
如果可能存在其他一些指标,我可以根据这些指标获得时间数据,这些数据应该在多次运行中几乎保持不变。
您可以多次运行并取平均值。这将隐藏任何高结果/异常值,并为您提供有利的吞吐量概念。如果运行时间足够长,它可以是给定机器的可重现数字。