栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

第一种也是最常用最简单的,使用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()即可。


创作很累,点赞免费。 自愿打赏,不为利往。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号