设为首页 - 加入收藏
您的当前位置:主页 > 教程 > 服务器 > 正文

九五至尊娱乐场JVM源码分析之SystemcurrentTimeMilli

来源:未知 编辑:九五至尊娱乐场 时间:2017-12-11
九五至尊娱乐场,95998888九五至尊在线是一个全自主研发的游戏平台,在九五至尊娱乐每天还有成千上万的在线会员与您共享激情!九五至尊娱乐场老品牌值得信赖!

  上周有同事问了我一个现象很诡异的问题,说JDK7和JDK8下的System.nanoTime()输出完全纷歧样,并且差距还很是大,是不是两个版本里的实现纷歧样,之前我也没留意过这个细节,感觉很是奇异,于是本人也正在当地mac机械上顿时测试了一下,获得如下输出:

  还实纷歧样,于是我再到linux下跑了一把,发觉两个版本下的值根基上差不多的,也就是次要是mac下的实现可能纷歧样

  公然发觉JDK8下多了一个__APPLE__宏下定义的实现,和JDK7及之前的版本的实现是纷歧样的,不外其他BSD系统是一样的,只是macos有点纷歧样,由于日常平凡我们次要利用的情况仍是Linux为从,因而对于macos下具体异同就不做过多注释了,有乐趣的本人去研究一下。

  说白了,其实就是看librt.so.1或者librt.so中能否定义了clock_gettime函数,若是定义了,就间接挪用这个函数来获取时间,留意下上面的传给clock_gettime的一个参数是CLOCK_MONOTONIC,至于这个参数的感化后面会说,这个函数正在glibc中有定义

  而我们JVM里取纳秒数时传入的是CLOCK_MONOTONIC这个参数,因而会挪用如下的方式

  上面的wall_to_monotonic的tv_sec以及tv_nsec都是负数,正在系统启动初始化的时候设置,记实了启动的时间

  我们其实能够写一个简单的例子从侧面来验证currentTimeMillis前往的到底是什么值

  至此该当大师也清晰了,为什么currentTimeMillis前往的值并不是nanoTime前往的值的1000000倍摆布了,由于两个值的参照纷歧样,所以没有可比性

相关文章:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

九五至尊娱乐场 - 老品牌值得信赖 联系QQ:498872301 邮箱:498872301@qq.com

Copyright © 2012-2017 九五至尊娱乐场 版权所有

Top