我试图获取各种Java程序的时间数据,然后根据此时间数据执行一些回归分析。以下是我用于获取时序数据的两种方法:
- System.currentTimeMillis():我最初使用了这种方法,但我希望当多次运行同一程序时,时间数据保持不变。在这种情况下,变化很大。当两个相同代码的实例并行执行时,变化更大。因此,我放弃了这个方法,开始寻找一些性能分析工具。
- Hotspot JVM中的-XX countBytecodes标志:由于时间数据的变化很大,我想测量执行此代码时执行的字节码数量。当多次执行同一程序时,这应该会给出更静态的计数。但是这也有变化。当程序按顺序执行时,变化很小,但在执行相同代码的 parellel 运行期间,变化很大。我还尝试使用
-Xint
进行编译,但结果类似。
因此,我正在寻找一些性能分析工具,它可以在执行代码时提供执行的字节码计数。当同一程序运行时,计数应保持恒定(或相关性接近1)。或者,如果可以基于其他指标获得时间数据,那么应在多次运行时保持几乎不变。
-Xint
标志,它强制 JVM 在解释模式下执行所有字节码。因此,这些优化位不应该出现。结果应该可以正常工作,对吗? - aichemzee