我正在尝试检查由于 Java 中的特定方法而导致的开销。假设方法是“Send(Message)”,我想“log(timestamp); Send(Message); log(timestamp)”,并找出时间戳之间的差异。问题是该方法非常快(预期的差异以纳秒为单位)。我也不想测量记录时间戳所花费的时间(除非它非常微不足道)。您能否推荐一种有效记录时间戳的方法?
问问题
423 次
2 回答
2
最好的方法是记录方法调用之前的时间,然后调用方法数千甚至数百万次并记录结束时间。快速除法将告诉您单个呼叫的总时间(这将非常小)。
由于 JIT'ing 确保您以与在生产中运行的方式相同的方式测试该方法,否则您最终可能会在现实世界中得到与测试中不同的结果。此外,您可能希望在开始时间测试之前运行该方法几千次,以确保您实际上运行的是完全优化的代码。
于 2013-06-20T14:01:53.573 回答
0
如果您担心log
开销,解决方法很简单:
final long before, after;
before = System.nanoTime();
send(message);
after = System.nanoTime();
log("before: " + before);
log("after: " + after);
因此,剩下的唯一开销是对 System.nanoTime() 的调用。
于 2013-06-20T14:07:00.683 回答