为什么不能用System.currentTimeMillis()计算执行时间?

1. 前提概要
  • System.currentTimeMillis()是系统时间,系统时间修改、闰秒会导致跳动。
  • System.nanoTime()仅用于计算耗时,和系统时间没有强关联。
  • System.nanoTime()单位是纳秒,但不保证有纳秒的精度,但保证精度至少比System.currentTimeMillis()高。
  • UTC时间实际一天可能是86399或86401秒,标准时间是有铯133衰变周期决定的,需要对齐太阳日。
  • Java时间标准(Time-Scale)把每一天都精确的定义为86400秒,会忽略闰秒。
  • Java8开始引入Instant和Duration,使用Java时间标准(Time-Scale)。这两个类是线程安全的。
2. 为什么System.currentTimeMillis()不适合计算执行时间?
因为系统时间修改或者闰秒的问题,currentTimeMillis跳动会导致计算不准确。
3. 可选的方案
3.1 Java8的Instant和Duration

Instant使用Java的时间标准,精确的86400秒,不存在闰秒的问题。

Instant start = Instant.now();
// CODE HERE        
Instant finish = Instant.now();
long timeElapsed = Duration.between(start, finish).toMillis();
3.2 使用Apache Comman Lang里的StopWatch

引入依赖

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version>
</dependency>

Java代码

StopWatch watch = new StopWatch();
watch.start();
// CODE HERE
watch.stop();
System.out.println("Time Elapsed: " + watch.getTime());
4. 延伸阅读

JMH(Java Microbenchmark Harness),Java9开始会成为OpenJDK的一部分。JMH会处理JVM热身(warm-up)和代码优化(code-optimization),这样测试的结果会更准一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity中Shader指令优化(编译后指令解析)

文章目录 前言一、我们先创建一个简单的Shader二、编译这个Shader&#xff0c;并且打开1、编译后注意事项2、编译平台 和 编译指令数3、顶点着色器用到的信息4、顶点着色器计算的核心部分5、片元着色器用到的信息6、片元着色器核心部分 前言 我们先读懂Shader编译后代码&#…

Linux命令与shell脚本编程大全【读书笔记 + 思考总结】

Linux命令与shell脚本编程大全 第 1 章 初识Linux shellLinux的组成及关系结构图是什么&#xff1f;Linux系统内核的作用是什么&#xff1f;内核的主要功能是什么&#xff1f;&#xff08;4点&#xff09;物理内存和虚拟内存是什么关系&#xff1f;内核如何实现虚拟内存&#x…

php轻量级性能分析工具 xhprof

windows版本 下载xhprof 选择最新的DLL版本&#xff0c;我写的时候最新的DLL版本是 2.3.5&#xff0c;将里面的 php_xhprof.dll 文件复制到php的扩展目录ext中。下载tgz版本&#xff0c;在同一个位置下载最新版本的即可&#xff0c;主要原因是dll版本中缺少 xhprof_html 和 xh…

Swagger各版本访问地址

2.9.x 访问地址: http://ip:port/{context-path}/swagger-ui.html 3.0.x 访问地址: http://ip:port/{context-path}/swagger-ui/index.html 3.0集成knife4j 访问地址: http://ip:port/{context-path}/doc.html

Ubuntu中MySQL安装与使用

一、安装教程&#xff1a;移步 二、通过sql文件创建表格&#xff1a; 首先进入mysql&#xff1a; mysql -u 用户 -p 回车 然后输入密码source sql文件&#xff08;路径&#xff09;;上面是sql语句哈&#xff0c;所以记得加分号。 sql文件部分截图&#xff1a; 创建成功后的部…

【android开发-04】android中activity的生命周期介绍

1&#xff0c;返回栈 android中使用任务task来管理activity&#xff0c;一个任务就是一组存放在栈里的活动的集合&#xff0c;这个栈被称为返回栈。栈是一种先进先出的数据结构。当我们启动一个新的活动&#xff0c;他会在返回栈中人栈&#xff0c;并处以栈顶的位置&#xff0…

浮点运算误差

输出所有形如aabb的4位完全平方数&#xff08;即前两位数字相等&#xff0c;后两位数字也相等&#xff09; 解决这个问题首先需要表示aabb这个变量&#xff0c;只需要定义一个变量n存储即可&#xff0c;另一个问题就是如何判断n是否为完全平方数&#xff1f; 第一种思路是先求出…

【python学习】Python 线程编程(类内多线程编程)

Python线程编程&#xff08;类内多线程编程&#xff09; 文章目录 Python线程编程&#xff08;类内多线程编程&#xff09;多线程编程的函数Function级多线程编程class级多线程编程进阶 类内多线程 多线程可以同时执行一段代码的多个程序。使用多线程可能使程序运行速度更快。 …

前端常见Linux操作命令

压缩文件 压缩 dist文件为dist.tar.gz tar -czvf dist.tar.gz dist 解压文件 tar -xzvf dist.tar.gz 列出目前工作目录所含的文件及子目录 ls 显示当前目录中的所有文件和目录&#xff0c;包括隐藏文件 ls -a 显示文件和目录的详细信息 它以长格式显示目录内容&#xff0c;包…

【Python表白系列】无限弹窗,满屏表白代码来啦(完整代码)

文章目录 满屏表白代码环境需求完整代码详细分析系列文章 满屏表白代码 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需…

TypeScript 的安装与使用

npm i typescript -g依赖会安装 tsc 命令 tsc -v初始化 配置 tsc --init生成 tsconfig.json tsconfig.json 配置 要支持 import 模块语法的话 rollup的配置 target 选项需要设置 ES5 module 选项需要改成 es2015 esbuild 的配置 target: ESNext module: ESNext moduleReso…

rust中动态数组Vec的简单使用

在Rust中&#xff0c;Vector&#xff08;简称Vec&#xff09;是一个动态数组数据结构&#xff0c;它可以动态地增加或减少其容量。Vec是Rust标准库中的一个常见类型&#xff0c;非常适合用于存储和操作一系列相同类型的值。 Vec其实是一个智能指针&#xff0c;用于在堆上分配内…

2022年1月14日 Go生态洞察:Go 1.18 新教程探索

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

绩效考核管理项目|记录2

给界面添加筛选条件并且把搜索功能实现 这段代码写入搜索方法里面就能实现功能。 private void bingdgv(){//筛选项&#xff1a;用户名、职位代码、是否辞职string userName txtUserName.Text.Trim();int baseTypeId (int)base_cbx.SelectedValue;bool isStop isdel_ckb.Che…

苍穹外卖--订单状态定时处理

通过定时任务每分钟检查一次是否存在支付超时订单&#xff08;下单后超过15分钟仍未支付则判定为支付超时订单&#xff09;&#xff0c;如果存在则修改订单状态为“已取消”通过定时任务每天凌晨1点检查一次是否存在“派送中”的订单&#xff0c;如果存在则修改订单状态为“已完…

【VMware相关】VMware vSphere存储方案

一、iSCSI存储 参考文档 VMware官方文档&#xff1a;配置iSCSI适配器和存储 华为配置指南&#xff1a;VMware ESXi下的主机连通性指南 1、配置说明 如下图所示&#xff0c;VMware配置iSCSI存储&#xff0c;需要将物理网卡绑定到VMKernel适配器上&#xff0c;之后再将VMKernel适…

Golang数据类型(数字型)

Go数据类型&#xff08;数字型&#xff09; Go中数字型数据类型大致分为整数&#xff08;integer&#xff09;、浮点数&#xff08;floating point &#xff09;和复数&#xff08;Complex&#xff09;三种 整数重要概念 整数在Go和Python中有较大区别&#xff0c;主要体现在…

opencv 图像边框

cv.copyMakeBorder() 图像设置边框或者填充

mybatis中<association> 和 <collection>

在 MyBatis 中&#xff0c;<association> 和 <collection> 是用于配置结果映射中关联关系的两个元素。 <association> 用于配置一对一的关联关系&#xff0c;表示两个对象之间的关系是一对一的。例如&#xff0c;一个订单对象关联一个用户对象&#xff0c;使…

大屏适配方案(vw、vh)

开发大屏主要是两方面的工作&#xff1a; 大屏之关键-前期的自适应适配根据 ui 稿绘制图表&#xff0c;调细节 方案实现方式优点缺点vw vh1.按照设计稿的尺寸&#xff0c;将px按比例计算转为vw和vh1.可以动态计算图表的宽高&#xff0c;字体等&#xff0c;灵活性较高 2.当屏幕…