【发布时间】:2014-09-26 15:58:59
【问题描述】:
我试图获取各种 Java 程序的计时数据。然后我不得不根据这个时序数据进行一些回归分析。以下是我用来获取时序数据的两种方法:
- System.currentTimeMillis():我最初使用这个,但我希望在同一程序多次运行时计时数据保持不变 次。在这种情况下,变化很大。当两个实例 相同的代码并行执行,变化更大。所以 我放弃了这个并开始寻找一些分析器。
-
Hotspot JVM 中的-XX countBytecodes Flag:由于时序数据的变化很大,所以我想测量执行此代码时执行的字节码的数量。当同一个程序被多次执行时,这应该给出更静态的计数。但这也有变化。当程序按顺序执行时,变化很小,但在相同代码的并行运行期间,变化很大。我也尝试使用
-Xint进行编译,但结果相似。
所以我正在寻找一些分析器,它可以给我在执行代码时执行的字节码计数。在同一程序的运行中,计数应保持不变(或相关性接近 1)。或者,如果有其他一些指标,我可以根据这些指标获取计时数据,这些数据在多次运行中应该几乎保持不变。
【问题讨论】:
-
我不知道。你为什么要这样做? VisualVM 是一个不错的分析器。但是在 JIT 优化了您的方法之后,您尝试收集的数据毫无意义,所以我不知道您如何收集数据。
-
@ElliottFrisch 我想根据执行时间性能对代码进行评分,并相互比较程序,根据性能相似的程序对数据进行聚类等。
-
我认为这行不通。
-
您为什么要排除特定时间与您的测量值不同的事实?这不会破坏他们的目的吗?
-
@ElliottFrisch 我正在使用
-Xint标志,它强制JVM 以解释模式执行所有字节码。所以那些优化位不应该出现。因此,这应该可以正常工作吗?
标签: java performance jvm profiler jprofiler