Bil*_*ard 74 java benchmarking
有没有人使用秒表基准测试,还是应该总是使用性能工具?有没有适合Java的免费工具?你用什么工具?
为了澄清我的担忧,由于操作系统调度,秒表基准测试会出错.在程序的给定运行中,操作系统可能会在您正在计时的函数中间安排另一个(或多个)进程.在Java中,如果你试图为一个线程化的应用程序计时,事情会更糟糕,因为JVM调度程序会在混合中引入更多的随机性.
基准测试时如何解决操作系统调度问题?
Law*_*Dol 49
如果您测量足够的迭代以使其有意义,则秒表基准测试很好.通常,我需要一些单位数秒的总经过时间.否则,您的结果很容易因计划和您的流程的其他操作系统中断而严重扭曲.
为此,我使用了很久以前构建的一些静态方法,它们基于System.currentTimeMillis().
对于我使用jProfiler多年的分析工作,并发现它非常好.我最近查看了YourKit,这在WebSite上看起来很棒,但我个人并没有使用它.
为了回答关于调度中断的问题,我发现重复运行直到实现/观察到一致性,在实践中用于清除过程调度的异常结果.我还发现线程调度对5到30秒之间的运行没有实际影响.最后,在您通过几秒钟后,根据我的经验,阈值调度对结果的影响可以忽略不计 - 我发现5秒运行的时间和迭代的运行时间平均为5分钟.
您可能还需要考虑预先运行测试代码大约10,000次来"预热"JIT,具体取决于您希望测试代码在现实生活中随时间运行的次数.
只要您测量足够大的时间间隔,它就完全有效.我会执行20-30次运行您想要测试的内容,以便总耗用时间超过1秒.我注意到基于System.currentTimeMillis()的时间计算往往是0ms或~30ms; 我认为你不能得到更精确的东西.如果您确实需要测量一小段时间间隔,可能需要尝试System.nanoTime():
分析器为您提供更详细的信息,这有助于诊断和修复性能问题.
在实际测量方面,秒表时间是用户注意到的,因此如果您想验证物品是否在可接受的范围内,秒表时间就可以了.
但是,当您想要实际修复问题时,分析器可能非常有用.
秒表实际上是最好的基准!
真正的端到端用户响应时间是真正重要的时间。
并非总是可以使用可用的工具来获得该时间,例如,大多数测试工具并未包括浏览器呈现页面所花费的时间,因此,css编写错误的过于复杂的页面将显示对测试的响应时间。工具,但需要5秒钟,再加上对用户的响应时间。
这些工具非常适合自动化测试以及问题确定的工具,但不要忽略您真正要测量的内容。