最常用、最准确的方式是使用 system.nanotime(),它返回纳秒级时间戳,适合测量短时间间隔且不受系统时钟调整影响;应避免使用精度低且易受校准干扰的 system.currenttimemillis()。

Java 获取当前代码运行耗时,最常用、最准确的方式是使用 System.nanoTime(),它返回纳秒级时间戳,适合测量短时间间隔,不受系统时钟调整影响。
用 System.nanoTime() 测量代码段耗时
在代码开始前记录起始时间,在结束后记录结束时间,相减即得耗时(单位:纳秒),可按需转为毫秒或微秒。
- 推荐写法(简洁安全):
long start = System.nanoTime();
// ⬇️ 这里放你要测的代码
doSomething();
long end = System.nanoTime();
long durationNs = end - start;
long durationMs = durationNs / 1_000_000; // 转毫秒
System.out.println("耗时:" + durationMs + " ms");
避免用 System.currentTimeMillis()
System.currentTimeMillis() 返回自 1970-01-01 的毫秒数,精度低(通常为 10–16ms)、可能受系统时间校准干扰,**不适合精确测量执行耗时**。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 仅适用于粗略计时(如日志打点、超时判断)
- 若误用于性能测量,结果可能严重失真(例如两次调用返回相同值)
封装成工具方法更实用
为减少重复代码,可封装一个简单计时器:
public static long time(Runnable task) {
long start = System.nanoTime();
task.run();
return System.nanoTime() - start;
}
<p>// 使用示例:
long ns = time(() -> {
Thread.sleep(100);
});
System.out.println(ns / 1_000_000 + " ms"); // 输出约 100 ms</p>
注意多线程和 JIT 的影响
真实性能测试需谨慎:
- JVM 启动初期会触发 JIT 编译,首次运行往往偏慢;建议预热几次再采样
- 多线程环境下,
nanoTime()仍可靠,但要确保测量的是目标线程内逻辑,避免跨线程误差 - 生产环境慎用高频计时(有轻微开销),调试或压测时使用即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










