使用System.currentTimeMillis()记录起止时间戳相减可得毫秒级耗时,适用于精度要求不高的场景;需在待测代码最外层前后各调用一次,避免循环内累加,其差值即为运行耗时(毫秒)。

直接用 System.currentTimeMillis() 记录起止时间戳,再相减即可得到毫秒级耗时,适合对精度要求不高的场景。
获取开始和结束时间戳
在程序执行前调用一次 System.currentTimeMillis() 获取起始毫秒数,执行结束后再调用一次获取结束毫秒数。两者相减就是运行耗时(单位:毫秒)。
- 确保两次调用分别位于待测代码的最外层前后,避免遗漏初始化或清理逻辑
- 不要在循环内部反复调用它来“累加”,那会引入额外开销且结果不可靠
- 注意该方法返回的是自 1970-01-01 00:00:00 UTC 起的毫秒数,不是相对时间,但差值有意义
简单示例代码
以下是一个典型用法:
long start = System.currentTimeMillis();
// 这里放你要测试的代码,比如:
for (int i = 0; i < 1000000; i++) {
Math.sqrt(i);
}
long end = System.currentTimeMillis();
long cost = end - start;
System.out.println("耗时:" + cost + " 毫秒");注意事项与局限性
System.currentTimeMillis() 受系统时钟影响,可能因 NTP 同步、手动调时而跳变,不适合高精度测量;它的分辨率通常为 10–16 毫秒(取决于操作系统),无法准确反映微秒级差异。
立即学习“Java免费学习笔记(深入)”;
- 若需更高精度(如纳秒级),应改用
System.nanoTime() - 单次测量易受 GC、线程调度、CPU 频率波动等干扰,建议多次运行取平均值
- 避免在 JMH 等专业基准测试中使用它——那是为粗略估算或调试临时打点准备的
什么时候用它就够了
快速验证某段逻辑是否明显变慢、观察不同实现的大致性能差距、开发阶段临时加日志看耗时,这类需求用 currentTimeMillis() 完全够用,写起来快、理解成本低、无依赖。
不复杂但容易忽略细节。


















