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
相关产品推荐
相关产品推荐

