我正在尝试检查由于Java中的特定方法而导致的开销。 假设方法是“发送(消息)”,我想“记录(时间戳);发送(消息);日志(时间戳)”,并找到时间戳之间的差异。问题是该方法非常快(预期差异以纳秒为单位)。我也不想测量记录时间戳所花费的时间(除非它是非常微不足道的)。你能否推荐一种有效记录时间戳的方法?
答案 0 :(得分:2)
执行此操作的最佳方法是记录方法调用之前的时间,然后调用方法数千甚至数百万次并记录结束时间。快速划分将告诉您单次通话的总时间(这将非常小)。
由于JIT'ing,请确保您以与在生产中运行相同的方式测试方法,否则您可能会在现实世界中对测试中的结果产生不同的结果。此外,您可能希望在开始时间测试之前运行该方法几千次,以确保您实际运行完全优化的代码。
答案 1 :(得分:0)
如果您害怕log
开销,解决方法很简单:
final long before, after;
before = System.nanoTime();
send(message);
after = System.nanoTime();
log("before: " + before);
log("after: " + after);
因此,剩下的唯一开销就是调用System.nanoTime()。