在我们写代码的时候为了统计方法或者代码块的耗时,往往需要自己写代码来统计。下面是常用的几种。
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)常被用作衡量项目规模和复杂性的指标之一。下面将详细...
特别要关注 Full GC,因为它会对整个堆进行整理,导致 Full GC 一般由于以下几种情况: 旧生代空间不足;Perm Gen 空间不足;统计得到的 GC 后晋升到旧生代的平均大小大于旧生代剩余空间;控制好新生代和旧生代的...
实现线程的主要方式有以下几种: 1. **继承`Thread`类**:直接继承`Thread`类并重写`run()`方法。 2. **实现`Runnable`接口**:实现`Runnable`接口并通过传递给`Thread`对象的构造函数来实现。 3. **实现`Callable`...
《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
在大型网站架构中,缓存的应用通常分为以下几种: 1. 数据库缓存:对于频繁查询但更改不频繁的数据,如用户信息、商品详情等,可以将结果缓存起来,避免每次请求都去数据库查找,显著提高读取速度。 2. 页面缓存:...
- **数组比较**:在Java中,数组是比较常见的数据类型之一。通常情况下,使用`equals`方法比较两个数组时,实际上比较的是数组的引用,即它们在内存中的地址。如果想要比较两个数组的内容是否相等,应该使用`Arrays....
- 通过分析线程堆栈,可以找到耗时最长的线程和方法。 - 重点关注CPU使用率高的线程和方法,优化这些部分。 - **1.3.8 线程堆栈不能分析什么问题?** - 内存泄漏: 需要通过内存分析工具(如MAT)来定位。 - 系统级别...
2. MVC(模型-视图-控制器)设计模式:这是一种常见的软件设计模式,用于分离业务逻辑、数据模型和用户界面。在企业用电管理系统中,模型负责数据处理,视图展示信息,控制器处理用户操作。 3. 异步处理:在处理...
在实际应用中,Log4j通常用于实现以下几种功能: - **监视代码中变量的变化**:通过周期性记录变量值到文件中,以便于后续的统计分析。 - **跟踪代码执行轨迹**:记录代码的运行流程,便于事后审计。 - **充当集成...
主线程是负责处理用户交互和绘制UI的线程,如果在这个线程中执行耗时操作,比如网络请求、数据库操作或大量计算,那么应用将无法及时响应用户的操作,造成“假死”现象。为了避免这种情况,Android引入了异步加载的...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Ehcache则是一种广泛使用的内存缓存系统,常与Spring搭配用于提升应用性能。本示例旨在通过一个完整的Spring集成Ehcache的Demo,帮助开发者理解如何...
在实现Jenkins、SVN与Maven持续集成的过程中,可能会遇到以下几种常见问题: - **NoclassDefFoundError异常**:如果出现类似“java.lang.NoClassDefFoundError: hudson/maven/agent/Main”的错误,通常是由于类路径...
Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了面向接口的远程方法调用能力,使得服务消费方可以像调用本地方法一样调用远程服务。Zookeeper 是 Apache 的一个分布式服务协调框架,常被用作Dubbo的服务...
**智慧图书管理系统**的出现是为了解决传统图书馆管理中的一些常见问题,如图书借阅信息管理不规范、容错率低、数据处理过程耗时耗力等。随着信息技术的快速发展,特别是互联网和移动互联网的普及,图书馆的管理模式...
在Android应用开发中,图表的绘制是数据可视化的重要部分,尤其在数据分析、统计报告或用户界面展示时。本项目着重于使用ACHARTENGINE库来实现折线图、曲线图、柱形图和饼状图的绘制,这四种图表类型在各种应用场景...
接下来介绍如何使用 JFreeChart 创建几个常用的图表。 1. **长条图 (Vertical Bar Chart)** 使用 `createVerticalBarChart` 方法可以创建长条图,其参数如下: - `title`:图表的标题。 - `categoryAxisLabel`...