验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java中怎么计算一段程序的运行时间

阅读:564 来源:乙速云 作者:代码code

Java中怎么计算一段程序的运行时间

      Java计算一段程序的运行时间

      介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。

      毫秒级别计算时间

              //初始时间
              long startTime = System.currentTimeMillis();
       
              /*要计算的程序部分*/
       
              //结束时间
              long endTime = System.currentTimeMillis();
              //打印
              System.out.println("程序运行时间:" + (endTime - startTime) + "ms");

      更精确的纳秒

              long startTime_N=System.nanoTime();
              /*测试程序部分*/
              long endTime_N=System.nanoTime(); //获取结束时间
              System.out.println("程序运行时间: "+(endTime_N-startTime_N)+"ns");

      Java程序运行时间统计

      写代码特别是完成一些对时间要求比较高的任务时,我们经常需要统计程序运行时间。整体思路当然很简单,在程序开启和结束后分别记录当前时间,两者相减,就得到了程序运行时间。以下介绍一些常见方法,具体使用情况可以根据项目需要选择。

      简单方法

      1.1 System.currentTimeMillis()

      大家第一印象肯定想到的是System.currentTimeMillis()。没错!这个可以用来做最简单的时间统计。

      long start = System.currentTimeMillis();
      // 业务逻辑代码...
      long end = System.currentTimeMillis();
      long timeElapsed = finish - end; // 单位为毫秒

      System.currentTimeMillis()记录的是系统当前时间(Wall-clock Time)距离1970-1-1 00:00:00流逝的时间,单位是毫秒。系统当前时间具体什么意思呢,就是你操作系统中的时间。currentTimeMillis()并不是精确到1ms,而是跟操作系统具体实现有关。使用这个方法会存在问题,因为系统时间是可以随时调节的。比如:

      • 用户手动调节系统时间;

      • 系统自动根据时间服务器调节时间;

      • 有些有冬令时、夏令时的地区会自动调节时间;

      • 闰秒(Leap seconds),这个闰秒曾经导致很多系统挂掉。

      所以这种方法如果用在开发阶段粗略估计时间是没有问题的,但是如果用到生产环境,就会存在很大的风险。

      1.2 System.nanoTime()

      nanoTime()与currentTimeMillis()正好相反,与系统时间完全无关,目的也正是用来统计程序耗时的。nanoTime()记录的是从某个固定的时刻起,到现在经过了多少纳秒。但是这个固定的时刻不是Unix时间戳的1970-1-1 00:00:00,而是启动虚拟机时生成的一个固定时刻,每个虚拟机的生成的这个时间都是不同的。

      nanoTime()虽然精确到纳秒,但事实并不是每纳秒都跳动一格,而是可能在3纳秒之后,一下跳动3格。不过可以保证的是至少能跟currentTimeMillis()一样精确。

      使用nanoTime()的统计方法跟currentTimeMillis()一样,如下:

      long start = System.nonoTime();
      // 业务逻辑代码...
      long end = System.nonoTime();
      long timeElapsed = finish - end; // 单位为纳秒

      Java8以上

      Java8以上定义了新的万年历,基于Java epoch,把一天精准地分为86400秒。使用新的Instant方法如下:

      Instant start = Instant.now();
      // 业务逻辑代码...
      Instant end = Instant.now();
      long timeElapsed = Duration.between(start, finish).toMillis(); // 单位为毫秒

      第三方库StopWatch

      StopWatch是Apache Commons Lang库内的一部分。可以用来方便地进行计时。

      首先添加maven库:

      
          org.apache.commons
          commons-lang3
          3.7
      

      然后代码中:

      StopWatch watch = new StopWatch();
      watch.start();
      // 业务逻辑代码...
      watch.stop();
      System.out.println("Time Elapsed: " + watch.getTime() + "ms"); // 单位为毫秒
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>