除非使用sleep(),否则在对Java代码进行基准测试时会出现巨大差异
我通过对象序列化(ObjectInputStream、ObjectOutputStream)在本地网络上对Java函数进行基准测试 在一个零负载的系统上,这给了我一个巨大的差异,结果如下:除非使用sleep(),否则在对Java代码进行基准测试时会出现巨大差异,java,testing,benchmarking,sleep,variance,Java,Testing,Benchmarking,Sleep,Variance,我通过对象序列化(ObjectInputStream、ObjectOutputStream)在本地网络上对Java函数进行基准测试 在一个零负载的系统上,这给了我一个巨大的差异,结果如下: 测试1:2.23 测试2:1.58 测试3:2.08秒 在测试步骤之间使用sleep()调用可以得到更好的数字,但这当然会导致更长的测试时间 运行几十个测试是不可能的,因为这会阻塞服务器队列 我应该坚持使用sleep()解决方案,还是有更好的方法来解决这个问题?我会分析系统的性能,看看为什么需要这么长时间
- 测试1:2.23
- 测试2:1.58
- 测试3:2.08秒
我应该坚持使用sleep()解决方案,还是有更好的方法来解决这个问题?我会分析系统的性能,看看为什么需要这么长时间。这也可以解释这种变化。请尝试在客户端和服务器上运行
-verbosegc
,以查看是否因此而出现较大延迟。您是否尝试过最小睡眠(又名Thread.sleep(1))或Thread.yield()的效果?我们必须查看生成这些数字的示例线束和测试。你也没有说“问题”是什么。为什么通过sleep()
手动添加请求时间比服务时间有差异要好?@Mark Peters:“问题”在于我们将使用测试数据来监控服务。当一个测试总是比它应该运行的时间长1秒时,这并不是一个大问题,因为测试在+-50%的运行时间之间出现峰值。@Peter Lawrey:GC的延迟实际上在0.1到0.4秒之间。正在寻找在远程测试仪中使用此数据的方法。