一、背景

撸代码时发现System.currentTimeMillis的调用都被封装成了cache类型,代码如下:

那么System.currentTimeMillis真的有这么这么差吗,如果差的话又是什么原因造成的?什么情况下可以直接调用原生方法,什么情况下需要使用缓存呢?

二、测试

先问会不会,再问为什么。那么System.currentTimeMillis的性能是否真的有这么差,很多大佬给出了自己的测试case并总结出下面两个结论

1在高并发场景下System.currentTimeMillis()并发问题严重,甚至比创建一个普通对象要耗时的多

2)单线程执行System.currentTimeMillis();比多线程并发执行System.currentTimeMillis();快了许多倍

2.1 单线程场景

大家都在讨论多线程场景下的表现,那么单线程场景下它的表现如何,测试代码如下:

分别跑System.currentTimeMillis 和new 简单对象1k,1w,10w次,测试结果如下:

amazing了,System.currentTimeMillis 竟然在单线程下的性能也比new一个对象差那么多

2.2 多线程场景

看起来线程数和平均耗费时间成正比例,串行处理

三、原理

参考:http://pzemtsov.github.io/2017/07/23/the-slow-currenttimemillis.html

挖源码就到此为止,因为已经有国外大佬深入到了汇编的级别来探究,简单来讲就是:

  • 调用gettimeofday()需要从用户态切换到内核态;
  • gettimeofday()的表现受Linux系统的计时器(时钟源)影响,在HPET计时器下性能尤其差;
  • 系统只有一个全局时钟源,高并发或频繁访问会造成严重的争用。

所以在调用次数少的时候是可以忍受的,效率不会太慢。调用次数多的时候产生竞争才会造成耗时变长。

nanoTime也并不能解决问题。

查看linux系统使用的数据源:

四、解决方法

1)如开头,缓存时钟

2)更改时钟源

System.currentTimeMillis的性能如何相关推荐

  1. System.currentTimeMillis的性能真有如此不堪吗?

    推荐大家关注一个公众号 点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Two things always to ...

  2. java currenttimemillis 效率_高并发场景下System.currentTimeMillis()的性能问题的优化

    前言 System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我也不知道,不过听说在100倍左右),然而该方法又是一个常用方法,有时不得不使用,比如生 ...

  3. System.currentTimeMillis的性能,真有如此不堪吗?

    以下文章来源方志朋的博客,回复"666"获面试宝典 # 疑惑,System.currentTimeMillis真有性能问题? 最近我在研究一款中间件的源代码时,发现它获取当前时间不 ...

  4. 不敢相信?System.currentTimeMillis()存在性能问题

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 推荐一个免费的写博神器:openwrite.cn.Markdown一次编写,轻松发布到CSD ...

  5. System.currentTimeMillis()存在性能问题

    System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电.但实际上在并发调用或者特别频繁调用它的情况下 ...

  6. Java的System.currentTimeMillis()的性能问题

    System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电.但实际上在并发调用或者特别频繁调用它的情况下 ...

  7. System.currentTimeMillis()的性能问题以及解决方法

    System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电.但实际上在并发调用或者特别频繁调用它的情况下 ...

  8. 疑惑,System.currentTimeMillis真有性能问题?

    点击关注公众号,Java干货及时送达 System.currentTimeMillis的性能真有如此不堪吗? 最近我在研究一款中间件的源代码时,发现它获取当前时间不是通过System.currentT ...

  9. Bullsh*t,System. currentTimeMillis大胆用起来,我说的!

    以下文章来源方志朋的博客,回复"666"获面试宝典 # 疑惑,System.currentTimeMillis真有性能问题? 最近我在研究一款中间件的源代码时,发现它获取当前时间不 ...

最新文章

  1. 6、JavaScript进阶篇③——浏览器对象、Dom对象
  2. java椭圆 类_java 椭圆算法
  3. solr配置同义词,停止词,和扩展词库(IK分词器为例)
  4. 关于jstl动态变量用法
  5. MongoDB副本集配置系列四:节点的关闭顺序
  6. 长期对着电脑是对身体很哟影响的
  7. Flutter 弧度与角度之间的换算
  8. 在Covid-19期间测量社交距离
  9. PLC通讯智能网关-不用PLC编程,实现西门子PLC与罗克韦尔(AB)PLC之间数据通讯
  10. 大一微积分笔记整理_大一上学期微积分高数复习要点
  11. c 语言鼠标钩子,线程钩子(鼠标钩子) | C/C++程序员之家
  12. 自动驾驶岗位常见面试笔试题
  13. 成分句法分析与依存句法分析
  14. maven中resource配置详解
  15. 公司小程序,公众号申请支付流程
  16. 获取公众号关注页面链接
  17. pc构件生产线及设备_PC构件生产线全套设备清单
  18. Javaweb自驾游景点查询网站设计与实现
  19. SAP权限管理,我的理解
  20. JAVA信息管理系统毕业设计 开题报告

热门文章

  1. java牛顿迭代法_Java实现牛顿迭代法求平方根
  2. 网站服务器双机热备,服务器双机热备概述
  3. 无字天书之Python第十二页(迭代器基础)
  4. 各路大咖云集探讨eBPF技术在可观测性领域的落地现状和未来可能
  5. 新用户通过阿里云活动首次购买云服务器注意事项(闭坑指南)
  6. 360所有功能替代方案征集
  7. Hack The Box-Sequel
  8. 251、飞机座位分配概率
  9. 1980-不存在的泳池 ZCMU
  10. iPhone 已停用