java中获取比毫秒更精确的时间

java中获取比毫秒更精确的时间

ID:8979727

大小:24.75 KB

页数:7页

时间:2018-04-13

java中获取比毫秒更精确的时间_第1页
java中获取比毫秒更精确的时间_第2页
java中获取比毫秒更精确的时间_第3页
java中获取比毫秒更精确的时间_第4页
java中获取比毫秒更精确的时间_第5页
资源描述:

《java中获取比毫秒更精确的时间》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、] java中获取比毫秒更为精确的时间(2012-07-0311:54:33)转载▼标签:杂谈分类:实践经验from:http://blog.csdn.net/paul_lh/article/details/6419982关键词:java毫秒微秒纳秒System.currentTimeMillis()误差 在对新写的超快xml解析器和xpath引擎进行效率测试时,为获取执行时间,开始也没多想就用了System.currentTimeMillis()来做的。由此碰到一个极其诡异的问题,同样的代码循环执行数次,分析

2、每一次的执行时间,发现一大部分执行时间为小于1毫秒,但其间也发现有相当一部分的执行时间有非常大的跳跃,而且时间都近似16毫秒左右。这个1毫秒和16毫秒结果,以计算机的运行速度看,差距是惊人的,必须找出其原因。 根据经验,在16毫秒时间内,cpu可以运算的指令数量是相当惊人的,所以可以基本断定这16ms的差距,应当不是cpu在执行指令,另外因为测试过程中gc输出也已经打开,未见gc发生,所以怀疑可能是发生了什么io阻塞,比如文件读写、加载类库、或者什么网络操作等,由于笔者测试的系统的环境比较复杂,其间有用到ehC

3、ache,数据库操作等,排查起来非常不容易。 在困扰了好一阵之后,忽然想到可能计时系统有误差,这才翻回来查了下System.currentTimeMillis()的文档,原来这个方法调用了个native方法,获取的时间精度会依赖于操作系统的实现机制。奶奶的! 既然不准,就看看有没更准的方法,在jdk5源码中,挨着System.currentTimeMillis()定义就是System.nanoTime()方法,靠,一下来了个精准1000000倍的取纳秒的方法,不过看jdk文档介绍,这个方法的精度依然依赖操作系统

4、,不过再不准也能达到微秒级的准确度,放心用吧!结果测试结果一下准确了不少,没再发现比较大的跳跃了。 所以这里提醒做非常精确的时间统计的朋友,谨慎使用System.currentTimeMillis()。  虽然用取纳秒的方法解决了我的问题,但对于为何使用System.currentTimeMillis()会造成那么大的跳跃,一直无解,有点郁闷。幸运的是今天恰巧看到一个网友做的测试很有意思,用事实数据证明了这个跳跃的存在,分享给感兴趣的同学!(原文链接:http://blog.csdn.net/elky1982/

5、archive/2009/10/16/4677365.aspx)以下内容为转帖: 在Java中可以通过System.currentTimeMillis()或者System.nanoTime()(JDK>=5.0)方法获得当前的时间的精确值。但是通过阅读Javadoc,我们发现这两个方法并不一定保证得到你所期望的精度。先来看System.currentTimeMillis():Returnsthecurrenttimeinmilliseconds.Notethatwhiletheunitoftimeofthere

6、turnvalueisamillisecond,thegranularityofthevaluedependsontheunderlyingoperatingsystemandmaybelarger.Forexample,manyoperatingsystemsmeasuretimeinunitsoftensofmilliseconds.诚如上面所说返回值的粒度依赖于底层操作系统,那么它在不同的平台上到底能提供是么样的精度,是否像函数名所写的那样真正精确到1毫秒呢?看下面一段测试程序: publicclassC

7、lockAccuracyTest{   publicstaticvoidmain(Stringargs[]){       SimpleDateFormatformatter=newSimpleDateFormat("dd-MMM-yyyyHH:mm:ss:SSS");       intsize=4000000;       //createanarraytoholdmillisecondtimes       //andlooptocapturethem       longtimes[]=newlong[

8、size];       for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。