秒表基准测试是否可以接受?

有没有人使用过秒表基准测试,或者应该使用性能测试工具? 是否有任何可用于Java的免费工具? 你用什么工具?

为了澄清我的担忧,秒表基准测试由于操作系统调度而出现错误。 在您的程序运行过程中,操作系统可能会安排另一个进程(或几个进程)处于您计时功能的中间。 在Java中,如果您尝试使用线程化应用程序,则情况会更糟糕,因为JVM调度程序甚至会将混乱中的一些随机性引入更多。

基准测试时如何解决操作系统调度问题?


秒表基准测试很好,只要你测量足够多的迭代是有意义的。 通常,我需要一定数量的单位数字秒的总时间。 否则,您的结果很容易因计划安排和其他操作流程中断而显着偏斜。

为此,我使用了很久以前构建的一些静态方法,这些方法基于System.currentTimeMillis()

对于分析工作,我已经使用了jProfiler多年,并且发现它非常好。 我最近查看了YourKit,这在网站上看起来很棒,但我个人并没有使用它。

为了回答关于计划中断的问题,我发现重复运行直到实现一致性/观察在实践中工作以清除进程调度中的异常结果。 我还发现,线程调度对于5到30秒之间的运行没有实际影响。 最后,按照我的经验,在通过几秒钟阈值调度之后,对结果的影响可以忽略不计 - 我发现5秒钟的运行时间与迭代的5分钟运行时间保持一致。

您可能还想考虑预先运行测试代码大约10,000次以“准备”JIT,具体取决于您希望测试代码在现实生活中随时间流逝的次数。


只要您测量足够的时间间隔,就完全有效。 我会执行20-30次你打算测试的内容,以便总时间超过1秒。 我注意到基于System.currentTimeMillis()的时间计算往往是0ms或〜30ms; 我认为你可以得到比这更精确的任何东西。 如果您确实需要测量一个小的时间间隔,您可能需要尝试System.nanoTime():

  • 文档:http://java.sun.com/javase/6/docs/api/java/lang/System.html#nanoTime()
  • 所以有关测量小时间跨度的问题,因为System.nanoTime()也存在一些问题:如何在Java中以微秒精度测量时间?

  • 分析器为您提供更详细的信息,这可以帮助诊断和修复性能问题。

    在实际测量方面,秒表时间是用户注意到的,所以如果您想验证物体在可接受的范围内,秒表时间就没有问题。

    但是,如果您想真正解决问题,分析器可能会非常有帮助。

    链接地址: http://www.djcxy.com/p/15177.html

    上一篇: Is stopwatch benchmarking acceptable?

    下一篇: Strace command in Unix