文档章节

java调试程序中每一步所用时间工具类

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 389
阅读 25
收藏 0

一般程序运行都参考每一步所用时间,用来反映程序的性能,TimeWatchUtil工具类就是实现此功能的工具。

package com.dyb.util;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 *<p>
 *description:主要用来调试程序,观察程序运行每一步所用的时间
 *</p>
 * @author 
 * @since 2015-10-19
 * @see
 */
public class TimeWatchUtil {
	/**
	 * 创建开始时间
	 */
	private long start;
	/**
	 * 节点数据(一般保存结束时间数据)
	 */
	private List<Object> sections;
	/**
	 * 节点名称
	 */
	private List<Object> sectionNames;
	
	/**
	 * 观察名称,下面包括很多的sectionNames,watchName属于sectionNames的整体,便于观察定位
	 */
	private String watchName;
	
	public static TimeWatchUtil createTimeWatch(String watchName){
		TimeWatchUtil timeWatch = new TimeWatchUtil();
		timeWatch.watchName = watchName;
		return timeWatch;
	}
	
	protected TimeWatchUtil(){
		sections = new ArrayList<>();//初始化sections
		sectionNames = new ArrayList<>();//初始化sectionNames
		start = System.currentTimeMillis();//当前系统开始时间
	}
	
	public void addStep(String stepName){
		sectionNames.add(stepName);//每一步节点的名称
		sections.add(Long.valueOf(System.currentTimeMillis()));//节点开始时间
	}
	
	public String outputTimeList(){
	    watchName = watchName.trim();
		StringBuffer outStr = new StringBuffer();
		//整体观察名称
		outStr.append("[TIMEWATCH] ");
		outStr.append(watchName);
		outStr.append(":");
		outStr.append(" [DETAILS] ");
		//输出每一个节点的名称和花费时间
		long last = start;
		for(int i=0;i < sections.size();i++){
			long temp = ((Long)sections.get(i)).longValue();
			outStr.append("" + (String)sectionNames.get(i) + ":" );
			outStr.append((double)(temp - last));
			outStr.append(" ");
			last = temp;
		}
		//总体花费时间
		long totalWaste = 0;
		if(sections != null && sections.size() > 0){
		    totalWaste = ((Long)sections.get(sections.size()-1)).longValue() - start;
        }
		//将总体花费时间插入到名称watchName的后面。"[TIMEWATCH] "和":"长度是13
		outStr.insert(watchName.length() + 13, totalWaste);
		
		return outStr.toString();
	}
}

使用方法:junit单元测试
package com.dyb.util;

import org.junit.Test;

public class TestWatch {
    @Test
    public void test() throws InterruptedException{
        TimeWatchUtil tw = TimeWatchUtil.createTimeWatch("TestWatch");
        Thread.sleep(1000);
        tw.addStep("1");
        Thread.sleep(2000);
        tw.addStep("2");
        Thread.sleep(3000);
        tw.addStep("3");
        System.out.println(tw.outputTimeList());
    }
}

输出结果:[TIMEWATCH] TestWathc:6000 [DETAILS] 1:1000.0 2:2000.0 3:3000.0 


本文转载自:http://blog.csdn.net/bq1073100909/article/details/49251337

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用

基于Sun HotSpot JVM 这里将介绍几款sun hotspot jvm 自带的监控工具: 请确保java_home/bin配置到path环境变量下,因为这些工具都在jdk的bin目录下 jps(JVM Process Status Tool):JVM机进程...

我类个擦
2014/09/12
0
1
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具...

anfield
2010/12/02
0
5
用 JNI 进行 Java 编程(2)

从 Java 程序调用 C/C++ 代码 概述 当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言去实现对时间...

Jerikc
2012/10/08
0
0
从一次线上故障思考Java问题定位思路

原文出处:melonstreet 问题出现:现网CPU飙高,Full GC告警 CGI 服务发布到现网后,现网机器出现了Full GC告警,同时CPU飙高99%。在优先恢复现网服务正常后,开始着手定位Full GC的问题。在...

melonstreet
09/19
0
0
JDK 1.7 基本概念和目录结构

参考资料: http://blog.csdn.net/kindazrael/article/details/7270673 http://docs.oracle.com/javase/7/docs/index.html JDK and JRE File Structure http://docs.oracle.com/javase/7/doc......

jack688
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arcgis jsapi接口入门系列:总览

开发环境: arcgis jsapi版本4.9 由于我们这套代码是基于vue,webpack开发的,会有少数vue代码,但总体不影响 里面还有些我们公司的js库和html css,给出的代码不能百分百直接运行,主要还是...

canneljls
1分钟前
0
0
月薪80k阿里架构师漫谈他是如何从一名小码农走到架构师的

01 刚当程序员时,我是属于那种勤勤恳恳类型的员工,工作态度用认真来形容不为过,每天我几乎是团队里最早到公司,又最晚下班的一个。而组员张工一般情况下都是准时上下班的,即使项目进度比...

Java填坑之路
4分钟前
0
0
oracle的resetlogs机制浅析

oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用? 它的原理机制是什么?他都起哪些作用? 我...

突突突酱
5分钟前
0
0
JAVA 获取两个日期间的所有日期

public static List<String> getDates(String startDate, String endDate){    Date d1 = new SimpleDateFormat("yyyyMMdd").parse(startDate);//定义起始日期    Date d2 = new Simple......

尘叙缘
12分钟前
0
0
Innodb中的事务隔离级别和锁的关系

#一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。...

Skqing
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部