美文网首页js css htmljava
Java计算程序代码耗时、计算程序运行的毫秒数的几种方式,几个S

Java计算程序代码耗时、计算程序运行的毫秒数的几种方式,几个S

作者: 王月亮17 | 来源:发表于2022-07-31 07:57 被阅读0次

    写代码的时候我们经常需要用到计时操作,来检测一段代码的性能,以便于做一些优化。本文主要说明计时的集中方式,可以根据自己的情况进行选择。

    第一种也是最常用最简单的,使用System.currentTimemillis()

    long startMillis = System.currentTimeMillis();
    Thread.sleep(1000L);
    long endMillis = System.currentTimeMillis();
    System.out.println(endMillis - startMillis);
    

    简单粗暴地计算出程序消耗的毫秒数。
    如果对精确度要求较高需要使用纳秒,那么可以使用System.nanoTime()代替System.currentTimemillis(),使用方式是一样的。

    第二种是使用StopWatch

    StopWatch有很多种,我们就一种一种来说吧。

    先说Spring框架自带的StopWatch

    最简单的使用方式:

    StopWatch stopWatch = new StopWatch("程序计时");
    stopWatch.start();
    Thread.sleep(1000L);
    stopWatch.stop();
    System.out.println(stopWatch.getTotalTimeMillis());
    

    如果希望得到纳秒,可以把stopWatch.getTotalTimeMillis()改为stopWatch.getTotalTimeNanos()
    稍微复杂点的用法,可以把一个大的任务分为几个小段分别计算:

    StopWatch stopWatch = new StopWatch("程序计时");
    stopWatch.start("第一段");
    Thread.sleep(1000L);
    stopWatch.stop();
    stopWatch.start("第二段");
    Thread.sleep(2000L);
    stopWatch.stop();
    System.out.println(stopWatch.prettyPrint());
    

    打印结果如下,只能打印纳秒:

    StopWatch '程序计时': running time = 3003282700 ns
    ---------------------------------------------
    ns         %     Task name
    ---------------------------------------------
    1000665300  033%  第一段
    2002617400  067%  第二段
    

    再来看看apache的StopWatch

    StopWatch stopWatch = new StopWatch("程序计时");
    stopWatch.start();
    Thread.sleep(1000L);
    stopWatch.stop();
    System.out.println(stopWatch.getTime());
    

    apache的StopWatch是也可以分段,但是分段的形式与Spring的StopWatch不太一样:

    StopWatch stopWatch = new StopWatch("程序计时");
    stopWatch.start();
    Thread.sleep(1000L);
    stopWatch.split();
    System.out.println(stopWatch.getSplitTime());
    Thread.sleep(2000L);
    stopWatch.stop();
    System.out.println(stopWatch.getSplitTime());
    

    两次都会打印时间,但是后面打印的时间会包含前面的时间,而不是分开计算,输出结果如下:

    1001
    3007
    

    如果希望得到纳秒,可以使用stopWatch.getNanoTime()stopWatch.getSplitNanoTime()

    还有谷歌的StopWatch

    Stopwatch started = Stopwatch.createStarted();
    Thread.sleep(1000L);
    long seconds = started.stop().elapsed().getSeconds();
    System.out.println(seconds);
    

    创建不能通过new的方式,要调用createStarted()方法来创建。getSeconds()获取的是秒,如果要获取纳秒,使用getNano()即可。

    相关文章

      网友评论

        本文标题:Java计算程序代码耗时、计算程序运行的毫秒数的几种方式,几个S

        本文链接:https://www.haomeiwen.com/subject/qlkvbrtx.html