`
Josh_Persistence
  • 浏览: 1664417 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Stop Watch - java获取方法的具体执行时间

    博客分类:
  • Java
阅读更多

大家都知道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. 更加精确的模拟:

  1. stWatch.start();  
  2.   
  3.    
  4.   
  5. step1();  
  6.   
  7.    
  8.   
  9. stWatch.split();  
  10.   
  11.    
  12.   
  13. System.out.println("Time consumed by step1: "+stWatch.getSplitTime());  
  14.   
  15.    
  16.   
  17. step2();  
  18.   
  19.    
  20.   
  21. stWatch.split();  
  22.   
  23.    
  24.   
  25. System.out.println("Time consumed by step1 and step2: "+stWatch.getSplitTime());  
  26.   
  27.    
  28.   
  29. stWatch.stop();  

 

但如上的代码有些许不足: 每次getSplitTime得到的值都是当前所有步骤的总和,而不是当前这个步骤的耗时值,以上面代码为例,它没有直接地得出step1和step2两个步骤的各自耗。

 

于是原来基础上加了两个方法(加了方法的源码见附件): splitAndSaveTime和getSplitTimeByStep。这样的演示代码如下:

 

1
3
分享到:
评论
1 楼 freezingsky 2013-07-03  
只是简单的介绍API就没什么意思了。如果能进一步的说明,二者的差异性,以及后者的实现方式,相信会更好!

相关推荐

    基于IDEA调试模式与StopWatch工具类如何优雅实现Java代码执行时间检测统计博文的代码工程

    作为程序员在我们的日常编码过程中经常需要统计一段代码或者一个方法的执行时间,尤其是当以一个接口的执行响应时间比较长需要优化的时候,我们就需要统计接口实现方法中的那些代码片段执行比较耗时,然后再针对耗时...

    interval-stop-watch:使用计时器进行拆分

    这个名为"interval-stop-watch"的项目似乎是一个基于Java实现的间隔秒表工具,它允许用户对时间进行精确的分割和管理,尤其适用于追踪代码执行的时间段。下面将详细解释这个工具的核心功能和可能的实现方式,以及它...

    性能监控工具类(StopWatchUtil)

    在Java中,我们可以使用System.nanoTime()方法获取纳秒级别的精确时间,从而计算出精确的执行时间。这个工具类可能会包含以下关键方法: 1. `start()`: 开始计时,通常会记录当前时间作为起始时间。 2. `stop()`: ...

    JDB的使用(java debug工具介绍)

    11. 断点设置:使用 `stop` 命令在方法中设置断点,使用 `clear` 命令清除断点。 12. 异常处理:使用 `catch` 命令出现指定的异常时中断,使用 `ignore` 命令对于指定的异常取消中断。 13. 字段监视:使用 `watch` ...

    跑表

    在实际开发中,我们可能需要记录多个代码段的执行时间,这时可以使用`StopWatch`类,例如`Stop_Watch-master`项目中的实现。`StopWatch`通常包含开始、停止、重置等方法,并能以多种时间单位报告执行时间。这种类的...

    Redis命令大全

    - **探测服务延迟**:通过`TIME`命令获取当前时间,结合客户端时间计算延迟。 - **监控正在请求执行的命令**:使用`MONITOR`命令监控实时执行的命令。 - **查看统计信息**:`INFO`命令提供详细的运行状态信息。 - **...

    Vue.js面试题.pdf

    - **watch**:适合监听某个属性变化时执行某些操作,尤其是当需要执行非简单的逻辑或操作时。 #### 7. Vue.js中如何进行路由导航?请简要描述Vue Router的基本用法。 Vue Router是Vue官方的路由管理器,它与Vue.js...

    zookeeper3八本

    8. **Watch机制**:Watch是Zookeeper的一种事件监听机制,客户端可以为任何节点设置Watch,当该节点发生变化时,Zookeeper会向设置Watch的客户端发送通知,实现数据变更的实时同步。 9. **安全性**:Zookeeper支持...

    zookeeper分布式集群配置

    解压后将其添加到环境变量`PATH`和`JAVA_HOME`中,这样可以在任意目录下执行Java命令。修改`~/.bashrc`或`~/.bash_profile`文件,添加如下行: ```bash export JAVA_HOME=/path/to/jdk export PATH=$JAVA_HOME/bin:...

Global site tag (gtag.js) - Google Analytics