大家都知道java中,如果想查看一个方法执行具体的时间,最简单的方法就是在方法执行前后使用long System.currentTimeMillis()获取当前的时间,再用时间相减。其实这样获取的时间是相对不精确的。例如在下面的程序中:
long startTime = System.currentTimeMillis();
method();
long endTime = System.currentTimeMillis();
executeTime = endTime - startTime
其实method可以是一个很简单的方法也可以是一个很复杂的方法,在method中,我们可以去修改各种各样的信息,可以去和第三方的jar包进行交互,这样其实他的执行时间有可能会取决于和第三方的交互时间,而第三方的执行时间,有可能还有各种网络连接,数据库连接等相关,所以我们往往是不能很精确的获取这个时间的,最精确的办法是用反射的原理,利用Spring的AOP编程,逐步地去查看每个方法的执行细节所花费的时间,但这样往往很复杂,实际上,Apache中的common框架中的一个工具类org.apache.commons.lang.time StopWatch 可以很好的模拟了秒表,通过它的split方法和getSplitTime方法,可以很好地看出各分步骤对性能下降的贡献值来。
1. 简单的模拟:
watch.start();
logger.info("Start to get information from VCenter: " + vCenter);
try {
vc = inventory.getVCenterInfo();
} catch (Exception e) {
logger.error("cannot get VCenter info: " + vCenter , e);
return;
}
watch.stop();
logger.info(String.format("End to get information from VCenter: %s, spend time:%s(ms) ", vCenter, watch.getTime()));
2. 更加精确的模拟:
- stWatch.start();
- step1();
- stWatch.split();
- System.out.println("Time consumed by step1: "+stWatch.getSplitTime());
- step2();
- stWatch.split();
- System.out.println("Time consumed by step1 and step2: "+stWatch.getSplitTime());
- stWatch.stop();
但如上的代码有些许不足: 每次getSplitTime得到的值都是当前所有步骤的总和,而不是当前这个步骤的耗时值,以上面代码为例,它没有直接地得出step1和step2两个步骤的各自耗。
于是原来基础上加了两个方法(加了方法的源码见附件): splitAndSaveTime和getSplitTimeByStep。这样的演示代码如下:
相关推荐
在java语言中,使用多线程技术编程时,提出终止一个线程时不采用stop方法的三个原因,并举例加以证明,最后给出了新的解决方法。在java编程过程中,采用多线程技术可以更好地利用系统资源,减少对用户的响应时间,提高系统...
此程序能帮助你实现将命令行程序变成服务运行,比如将"java -jar xxx.jar" 放在后台执行。 ./start-stop-daemon --help start-stop-daemon 1.9.18 for Debian - small and fast C version written by Marek ...
terraform-aws-lambda-自动启动-停止cloudwatch-警报 terraform模块,用于定期启用或禁用CloudWatch警报。 为了节省一些AWS成本,通常会在营业时间之外停止非生产资产。 此类操作可能会触发CloudWatch警报,以提醒...
Java数据结构电子书:There are plenty of books that teach introductory data structures. Some of them are very good. Most of them cost money, and the vast majority of computer science undergraduate ...
systemctl stop mysqld //停止 systemctl restart mysqld //重启 systemctl enable mysqld //设定mysql服务随着系统启动自动启动 11\登录MySQL数据库 mysql -u root -p 输入密码: 出现mysql> //表示...
Stop-Watch-js 检查出来: :
react-native-stop-watch-app React本地秒表应用程序,您可以观看时间,保存和重置
用法将添加到您的项目中: npm install watch-size 使用watchSize()重写查询: import watchSize from 'watch-size' ;const stop = watchSize ( document . querySelector ( '.box:nth-child(2)' ) ( { width , ...
采用STM32L051C8T6芯片,可进入STOP低功耗模式,采用按键唤醒、串口唤醒两种唤醒方式。利用STM32CUBEMX生成,HAL库,MDK6工程。完全工程例程,有注解,亲测可用。
Stop-and-go交通场景中基于车间通信平滑速度波动的节能减排算法,王东,熊洁,车辆在Stop-and-go交通情景下频繁加减速会增加尾气排放含量。目前,已有很多工作致力于研究在Stop-and-go情形下如何减少车辆尾气排放和...
一个专门为手机写的程序,可以查公交线路。
STM32L051C8T6低功耗STOP模式例程,完整工程例程,亲测可用。采用按键唤醒、串口唤醒两种方式唤醒。
Mac的简单秒表。
STM32L051C8T6-STOP模式-按键、串口可唤醒源码.zip
信息安全_数据安全_D1T1 - Stop Laughing - Cyber Sec 威胁建模 黑色产业 漏洞分析 安全响应 金融安全
Shopify主题模板 Foodly-v18-One-Stop-Food-Shopify-Theme
安卓秒表stop watch最新版apk
指标BBands Stop v1
停止(stop)一个线程(靠interrupt手段)4---马克-to-win java视频