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

Java程序算法执行时间获取异常:为何始终返回0?

问题分析与解决方案

兄弟,你遇到的这个问题我之前也踩过坑!核心原因其实很简单——你的算法执行时间太短,短到小于你用的那些Java时间API的精度,这就是为啥Java里测出来都是0,而C语言能测出微秒级耗时的关键。

为啥之前的方法都测不出结果?

  • Instant.now()、Date.getTime()、Calendar.getTimeInMillis()这些API的精度都是**毫秒级(1ms)**的,如果你的代码跑起来连1毫秒都不到,它们根本捕捉不到这么小的时间差,自然就返回0了。
  • 而C语言的clock()函数精度通常能到微秒级(1μs=0.001ms),所以能测出0.000004秒(也就是4微秒)的耗时,刚好在它的精度范围内。

正确的姿势:用System.nanoTime()搞定短耗时测量

Java里专门有个为短时间间隔测量而生的API——System.nanoTime(),它的精度能到纳秒级(1ns=0.001μs),对付微秒级的耗时完全不在话下。

给你整个实用的示例代码:

// 记录起始时间(纳秒级)
long start = System.nanoTime();
// 这里放你要统计耗时的方法
yourAlgorithmMethod();
// 记录结束时间
long end = System.nanoTime();

// 计算耗时,转换成不同单位方便阅读
long durationNanos = end - start;
double durationMillis = durationNanos / 1_000_000.0; // 转毫秒
double durationSeconds = durationNanos / 1_000_000_000.0; // 转秒

System.out.println("耗时(纳秒):" + durationNanos);
System.out.println("耗时(毫秒):" + durationMillis);
System.out.println("耗时(秒):" + durationSeconds);

额外提醒

  • 千万别用System.currentTimeMillis()来测代码耗时!它和Date.getTime()一样是毫秒精度,而且它是系统的 wall-clock 时间,万一系统同步时间(比如NTP校准),时间可能会跳变,测出来的间隔不准。
  • System.nanoTime()是专门为测量时间间隔设计的,它的计时起点是JVM启动后的某个时刻,不受系统时间调整的影响,精度拉满,是短耗时测量的首选。

你最后发现“程序实际执行时间不足1毫秒”的结论完全正确,这就是问题的本质~

内容的提问来源于stack exchange,提问作者IDK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:18