`
kanpiaoxue
  • 浏览: 1781259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java中统计方法耗时的几种常用方法

 
阅读更多

在我们写代码的时候为了统计方法或者代码块的耗时,往往需要自己写代码来统计。下面是常用的几种。

 

1、使用System的自带时间:

long start = System.currentTimeMillis();
TimeUnit.SECONDS.sleep(3L);
System.out.println("it consumes " +(System.currentTimeMillis() - start) + "ms");
// output :  consumes 3004ms

优点:系统自带,统计时间单位到:毫秒。(还有一个纳秒的版本。System.nanoTime())

缺点:不能重用代码,每次都需要重新写一个 start 的时间起点。 

 

2、使用 org.apache.commons.lang.time.StopWatch

public static void testStopWatch() throws InterruptedException {
     System.out.println("SLAMonitorThread.main() start");
     StopWatch sw = new StopWatch();
     sw.start();
     TimeUnit.SECONDS.sleep(1L);
     sw.split();
     System.out.println(
             "SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
     TimeUnit.SECONDS.sleep(1L);
     sw.split();
     System.out.println(
             "SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
     TimeUnit.SECONDS.sleep(1L);
     sw.split();
     System.out.println(
             "SLAMonitorThread.main() end. split:" + sw.getSplitTime() + ", " + sw.toSplitString());
     TimeUnit.SECONDS.sleep(1L);
     System.out.println("SLAMonitorThread.main() end. end:" + sw.getTime() + ", " + sw.toString());

     long start = System.currentTimeMillis();
     TimeUnit.SECONDS.sleep(1L);
     System.out.println("it consumes " + (System.currentTimeMillis() - start) + "ms");
     /*
      * SLAMonitorThread.main() start
      * SLAMonitorThread.main() end. split:1005, 0:00:01.005
      * SLAMonitorThread.main() end. split:2016, 0:00:02.016
      * SLAMonitorThread.main() end. split:3021, 0:00:03.021
      * SLAMonitorThread.main() end. end:4025, 0:00:04.025
      * it consumes 1004ms
      */
}

优点:可以多次使用,使用split即可多次使用。

缺点:需要依赖于额外的commons的jar

 

3、guava 的 StopWatch

和 org.apache.commons.lang.time.StopWatch 的用法类似。

 

4、非常好用的计算耗时的工具类:

org.apache.commons.lang.time.DurationFormatUtils.java

分享到:
评论

相关推荐

    代码行数统计工具

    代码行数统计工具是一种实用的软件开发辅助工具,主要用于帮助开发者快速了解项目中不同源代码文件的行数分布。在软件工程中,代码行数(LOC,Lines of Code)常被用作衡量项目规模和复杂性的指标之一。下面将详细...

    jvm常用调优方式

    特别要关注 Full GC,因为它会对整个堆进行整理,导致 Full GC 一般由于以下几种情况: 旧生代空间不足;Perm Gen 空间不足;统计得到的 GC 后晋升到旧生代的平均大小大于旧生代剩余空间;控制好新生代和旧生代的...

    Java后端开发面试宝典

    实现线程的主要方式有以下几种: 1. **继承`Thread`类**:直接继承`Thread`类并重写`run()`方法。 2. **实现`Runnable`接口**:实现`Runnable`接口并通过传递给`Thread`对象的构造函数来实现。 3. **实现`Callable`...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

    JAVA缓存与大型网站架

    在大型网站架构中,缓存的应用通常分为以下几种: 1. 数据库缓存:对于频繁查询但更改不频繁的数据,如用户信息、商品详情等,可以将结果缓存起来,避免每次请求都去数据库查找,显著提高读取速度。 2. 页面缓存:...

    java学习笔记

    - **数组比较**:在Java中,数组是比较常见的数据类型之一。通常情况下,使用`equals`方法比较两个数组时,实际上比较的是数组的引用,即它们在内存中的地址。如果想要比较两个数组的内容是否相等,应该使用`Arrays....

    java问题定位技术+性能优化

    - 通过分析线程堆栈,可以找到耗时最长的线程和方法。 - 重点关注CPU使用率高的线程和方法,优化这些部分。 - **1.3.8 线程堆栈不能分析什么问题?** - 内存泄漏: 需要通过内存分析工具(如MAT)来定位。 - 系统级别...

    企业用电管理系统(java+sqlserver+swing)

    2. MVC(模型-视图-控制器)设计模式:这是一种常见的软件设计模式,用于分离业务逻辑、数据模型和用户界面。在企业用电管理系统中,模型负责数据处理,视图展示信息,控制器处理用户操作。 3. 异步处理:在处理...

    log4j入门详解

    在实际应用中,Log4j通常用于实现以下几种功能: - **监视代码中变量的变化**:通过周期性记录变量值到文件中,以便于后续的统计分析。 - **跟踪代码执行轨迹**:记录代码的运行流程,便于事后审计。 - **充当集成...

    oscache的使用

    通过引入OSCache这一强大的缓存管理组件,开发者可以有效地解决信息系统中常见的性能瓶颈问题,如基础数据的变更处理和统计报表的生成等。不仅提高了系统的响应速度,还增强了其稳定性和可用性。对于那些希望优化Web...

    Android 异步加载

    主线程是负责处理用户交互和绘制UI的线程,如果在这个线程中执行耗时操作,比如网络请求、数据库操作或大量计算,那么应用将无法及时响应用户的操作,造成“假死”现象。为了避免这种情况,Android引入了异步加载的...

    spring+ehcache完整示例demo

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Ehcache则是一种广泛使用的内存缓存系统,常与Spring搭配用于提升应用性能。本示例旨在通过一个完整的Spring集成Ehcache的Demo,帮助开发者理解如何...

    jenkins_svn_maven持续集成.docx

    在实现Jenkins、SVN与Maven持续集成的过程中,可能会遇到以下几种常见问题: - **NoclassDefFoundError异常**:如果出现类似“java.lang.NoClassDefFoundError: hudson/maven/agent/Main”的错误,通常是由于类路径...

    dubbo开发服务端

    Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了面向接口的远程方法调用能力,使得服务消费方可以像调用本地方法一样调用远程服务。Zookeeper 是 Apache 的一个分布式服务协调框架,常被用作Dubbo的服务...

    基于springboot智慧图书管理系统源码数据库.doc

    **智慧图书管理系统**的出现是为了解决传统图书馆管理中的一些常见问题,如图书借阅信息管理不规范、容错率低、数据处理过程耗时耗力等。随着信息技术的快速发展,特别是互联网和移动互联网的普及,图书馆的管理模式...

    android 图表的绘制

    在Android应用开发中,图表的绘制是数据可视化的重要部分,尤其在数据分析、统计报告或用户界面展示时。本项目着重于使用ACHARTENGINE库来实现折线图、曲线图、柱形图和饼状图的绘制,这四种图表类型在各种应用场景...

    jfreechart

    接下来介绍如何使用 JFreeChart 创建几个常用的图表。 1. **长条图 (Vertical Bar Chart)** 使用 `createVerticalBarChart` 方法可以创建长条图,其参数如下: - `title`:图表的标题。 - `categoryAxisLabel`...

Global site tag (gtag.js) - Google Analytics