You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:45:49