Android代码段耗时测算疑问:System.nanoTime与SystemClock接口对比
关于Android纳秒级代码计时的问题解答
首先纠正你代码里的一个小错误:你写的elapsedTime = startTime - endTime是反向的,正确应该是endTime - startTime。不过就算修正这个,System.nanoTime()确实会因为多核心CPU时钟不同步的问题,偶尔出现计算结果为负的情况,你查证的原因是准确的。
针对你问的elapsedRealTime和elapsedRealTimeNanos接口,直接给结论:这两个完全能满足你的需求,不会出现System.nanoTime()的核心同步问题,原因如下:
- 这两个API基于系统启动后的全局统一时钟,不受线程在不同CPU核心切换的影响,时钟是单调递增的,不会出现时间跳变
SystemClock.elapsedRealtime()返回毫秒级精度,SystemClock.elapsedRealtimeNanos()返回纳秒级精度,直接用后者就能达到你要的纳秒级计时要求- 补充说明:这两个时钟会包含系统休眠的时间,但如果只是测试代码段的运行时间,这个不影响——因为系统休眠时你的代码也不会执行
正确的使用示例代码:
long startTime = SystemClock.elapsedRealtimeNanos(); // 要测试的代码段 long endTime = SystemClock.elapsedRealtimeNanos(); long elapsedTime = endTime - startTime;
内容的提问来源于stack exchange,提问作者xm lian
相关产品推荐
相关产品推荐

