秒表基准测试是否可以接受?
有没有人使用过秒表基准测试,或者应该使用性能测试工具? 是否有任何可用于Java的免费工具? 你用什么工具?
为了澄清我的担忧,秒表基准测试由于操作系统调度而出现错误。 在您的程序运行过程中,操作系统可能会安排另一个进程(或几个进程)处于您计时功能的中间。 在Java中,如果您尝试使用线程化应用程序,则情况会更糟糕,因为JVM调度程序甚至会将混乱中的一些随机性引入更多。
基准测试时如何解决操作系统调度问题?
秒表基准测试很好,只要你测量足够多的迭代是有意义的。 通常,我需要一定数量的单位数字秒的总时间。 否则,您的结果很容易因计划安排和其他操作流程中断而显着偏斜。
为此,我使用了很久以前构建的一些静态方法,这些方法基于System.currentTimeMillis()
。
对于分析工作,我已经使用了jProfiler多年,并且发现它非常好。 我最近查看了YourKit,这在网站上看起来很棒,但我个人并没有使用它。
为了回答关于计划中断的问题,我发现重复运行直到实现一致性/观察在实践中工作以清除进程调度中的异常结果。 我还发现,线程调度对于5到30秒之间的运行没有实际影响。 最后,按照我的经验,在通过几秒钟阈值调度之后,对结果的影响可以忽略不计 - 我发现5秒钟的运行时间与迭代的5分钟运行时间保持一致。
您可能还想考虑预先运行测试代码大约10,000次以“准备”JIT,具体取决于您希望测试代码在现实生活中随时间流逝的次数。
只要您测量足够的时间间隔,就完全有效。 我会执行20-30次你打算测试的内容,以便总时间超过1秒。 我注意到基于System.currentTimeMillis()的时间计算往往是0ms或〜30ms; 我认为你可以得到比这更精确的任何东西。 如果您确实需要测量一个小的时间间隔,您可能需要尝试System.nanoTime():
分析器为您提供更详细的信息,这可以帮助诊断和修复性能问题。
在实际测量方面,秒表时间是用户注意到的,所以如果您想验证物体在可接受的范围内,秒表时间就没有问题。
但是,如果您想真正解决问题,分析器可能会非常有帮助。
链接地址: http://www.djcxy.com/p/15177.html