- 浏览: 40676 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Monkey-_-DLuffy:
Hibernate.initialize(proxy) == ...
通过Spring管理hibernate session来解决lazy-load的问题
TimeMeasure是我以前写的一个java 辅助类,开发人员可以用它们在控制台打印任意两个步骤之间的时间消耗。中途可以pause这个时间计数方法,然后再resume回来,pause的时间是不计入到实际方法消耗的时间的。使用方法见TimeMeasure的main方法,另外如果你愿意,可以拓展它用log4j或者其他方式输出到文件。
TimeMeasure.java
public class TimeMeasure { // PTODO create junit test class private static HashMap<String, TimeStack> timers; private static int indent = 0; /** * measureActive is true by default. A true value means that all methods calls are processed else no one. */ public static boolean measureActive = true; /** * display is true by default. A true value means that all informations are displayed. */ public static boolean display = true; public static boolean displaySteps = true; /** * * DOC hywang Comment method "start". * * @param idTimer */ public static void begin(String idTimer) { if (!measureActive) { return; } init(); if (timers.containsKey(idTimer)) { if (display) { System.out.println(indent(indent) + "Warning (start): timer " + idTimer + " already exists"); //$NON-NLS-1$ //$NON-NLS-2$ } } else { indent++; TimeStack times = new TimeStack(); timers.put(idTimer, times); if (display) { System.out.println(indent(indent) + "Start '" + idTimer + "' ..."); //$NON-NLS-1$ //$NON-NLS-2$ } } } /** * * DOC hywang Comment method "end". * * @param idTimer * @return total elapsed time since start in ms */ public static long end(String idTimer) { if (!measureActive) { return 0; } init(); if (!timers.containsKey(idTimer)) { if (display) { System.out.println(indent(indent) + "Warning (end): timer " + idTimer + " doesn't exist"); //$NON-NLS-1$ //$NON-NLS-2$ } return -1; } else { TimeStack timeStack = timers.get(idTimer); timers.remove(idTimer); long elapsedTimeSinceLastRequest = timeStack.getLastStepElapsedTime(); if (display && displaySteps) { System.out.println(indent(indent) + "End '" + idTimer + "', elapsed time since last request: " //$NON-NLS-1$ //$NON-NLS-2$ + elapsedTimeSinceLastRequest + " ms "); //$NON-NLS-1$ } long totalElapsedTime = timeStack.getTotalElapsedTime(); if (display) { System.out.println(indent(indent) + "End '" + idTimer + "', total elapsed time: " + totalElapsedTime + " ms "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } indent--; return totalElapsedTime; } } /** * * DOC hywang Comment method "timeSinceBegin". * * @param idTimer * @return total elapsed time since start in ms */ public static long timeSinceBegin(String idTimer) { if (!measureActive) { return 0; } init(); if (!timers.containsKey(idTimer)) { if (display) { System.out.println(indent(indent) + "Warning (end): timer " + idTimer + " does'nt exist"); //$NON-NLS-1$ //$NON-NLS-2$ } return -1; } else { long time = timers.get(idTimer).getTotalElapsedTime(); if (display) { System.out.println(indent(indent) + "-> '" + idTimer + "', elapsed time since start: " + time + " ms "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } return time; } } /** * * DOC hywang Comment method "timeStep". * * @param idTimer * @return elapsed time since previous step in ms */ public static long step(String idTimer, String stepName) { if (!measureActive) { return 0; } init(); if (!timers.containsKey(idTimer)) { if (display) { System.out.println(indent(indent) + "Warning (end): timer " + idTimer + " does'nt exist"); //$NON-NLS-1$ //$NON-NLS-2$ } return -1; } else { TimeStack timeStack = timers.get(idTimer); timeStack.addStep(); /* * trace the timeline of every step,problem is that the code below " Calendar ca = Calendar.getInstance(); * Date now = ca.getTime();" will cost almost 13ms~15ms */ long time = timeStack.getLastStepElapsedTime(); if (display && displaySteps) { String timerStepName = idTimer + "', step name '" + stepName; System.out.println(indent(indent) + "-> '" + timerStepName + "', elapsed time since previous step: " + time + " ms "); //$NON-NLS-1$ //$NON-NLS-2$ } return time; } } public static void pause(String idTimer) { if (!measureActive) { return; } init(); if (!timers.containsKey(idTimer)) { if (display) { System.out.println(indent(indent) + "Warning (end): timer " + idTimer + " does'nt exist"); //$NON-NLS-1$ //$NON-NLS-2$ } return; } else { TimeStack time = timers.get(idTimer); // long time = times.getElapsedTimeSinceLastRequest(); time.pause(); if (display) { } } } public static void resume(String idTimer) { if (!measureActive) { return; } init(); if (!timers.containsKey(idTimer)) { begin(idTimer); return; } else { TimeStack times = timers.get(idTimer); long time = times.getLastStepElapsedTime(); times.resume(); if (display) { } } } /** * DOC hywang Comment method "init". */ private static void init() { if (timers == null) { timers = new HashMap<String, TimeStack>(); } } public static String indent(final int i) { StringBuilder stringBuilder = new StringBuilder(); for (int j = 0; j < i; j++) { stringBuilder.append(" "); //$NON-NLS-1$ } return stringBuilder.toString(); } public static void main(String[] args) { try { TimeMeasure.begin("a"); //开始一个计时 Thread.sleep(500); TimeMeasure.step("a", "1"); //开第一个步骤 Thread.sleep(800); TimeMeasure.pause("a");//暂停计时 Thread.sleep(600);//由于暂停了计时,这600MS不计入a的总时间 TimeMeasure.step("a", "2");//开始第二步 TimeMeasure.resume("a"); //计时继续 Thread.sleep(2000); TimeMeasure.end("a");//结束计时 } catch (InterruptedException e) { e.printStackTrace(); } } }
TimeStack.java
class TimeStack { long elapsedTime; long previousTimeResume; long previousElapsedTimeSinceLastStep; long previousStepTime; boolean isPaused = false; private boolean testMode = false; private int testModeIndex; private long currentElapsedTimeSinceLastStep; public TimeStack() { previousStepTime = previousTimeResume = getCurrentTime(); } public void setTestMode(boolean testMode) { this.testMode = testMode; } public long getTotalElapsedTime() { if (isPaused) { return elapsedTime; } else { return elapsedTime + getCurrentTime() - previousTimeResume; } } public long getLastStepElapsedTime() { return previousElapsedTimeSinceLastStep; } public void pause() { if (isPaused) { new Exception("Pause can't be done").printStackTrace(); } else { long currentTime = getCurrentTime(); elapsedTime += currentTime - previousTimeResume; currentElapsedTimeSinceLastStep += currentTime - previousStepTime; isPaused = true; } } private long getCurrentTime() { int[] times = { 0, 20, 50, 120, 230, 370, 390 }; if (testMode) { int time = times[testModeIndex++]; return time; } else { return System.currentTimeMillis(); } } public void resume() { long currentTime = getCurrentTime(); previousStepTime = previousTimeResume = currentTime; isPaused = false; } public void addStep() { long currentTime = getCurrentTime(); long tempElapsedTime = currentTime - previousStepTime; if (isPaused) { previousElapsedTimeSinceLastStep = currentElapsedTimeSinceLastStep; } else { previousElapsedTimeSinceLastStep = currentElapsedTimeSinceLastStep + tempElapsedTime; } currentElapsedTimeSinceLastStep = 0; previousStepTime = currentTime; } }
发表评论
-
Effective Java notes-Creating and Destroying Objects(1)
2014-03-19 14:11 737Item 1 Consider static factor ... -
log4j配置问题
2012-12-11 17:18 492转一篇配置log4j的文章 http://blog.csdn ... -
Struts2 Interceptor 的一个诡异问题
2012-12-06 00:19 1000之前开发了一个web应用程序,开始的架构是用JSP+Servl ... -
在ECLIPSE环境下远程DEBUG 已经发布的RCP产品
2011-11-17 11:01 1823Eclipse作为非常通用的IDE,除了提供常用的本 ...
相关推荐
- `StringUtils`:Apache Commons Lang库中的一个类,提供了大量的静态方法,用于处理字符串,如检查空值、替换、分割、连接、格式化等。 - `StringEscapeUtils`:同样来自Apache Commons Lang,主要用于转义和...
在Java的集合框架中,ArrayList和LinkedList等集合类虽然强大,但在处理特定任务时,可能需要额外的辅助工具。Java.util.Collections类提供了对集合的一系列操作,如排序、查找、填充等。此外,Guava库(Google ...
标题提到的“28个Java常用的工具类”可能是一个集合,包含了各种实用功能的类。以下是一些常见的Java工具类及其功能的详细说明: 1. **String类**:Java内置的String类提供了大量操作字符串的方法,如concat、...
在给定的标题“Java常用日期辅助类”中,我们可以推测这篇博文可能探讨了Java中的一些核心日期处理工具,如`java.util.Date`,`java.time`包中的类,以及自定义的日期助手类`DateHelper.java`。 `java.util.Date`是...
在文件名称列表中,"pandora-master"可能是指Pandora项目,这是一个开源的Android开发辅助框架。Pandora通常包含一系列模块,如日志管理、网络监控、性能统计等,旨在为开发者提供全方位的开发支持。 Pandora的核心...
Java时间工具类是Java开发中不可或缺的一部分,它们提供了一系列方便的方法来处理日期和时间,使得开发者可以更加高效地进行时间相关的操作。在这个简单的DateUtil.java工具类中,我们可以期待找到一些基本但实用的...
本资料“Java-Android工具类”显然是一份包含了多种实用工具类的集合,旨在帮助开发者在Java和Android开发过程中节省时间和精力。 首先,我们来探讨一下SD工具类。在Android系统中,外部存储空间(如SD卡)通常用于...
5. **DateUtil.java**: 日期时间工具类,帮助开发者处理日期和时间,如格式化日期、计算两个日期之间的差值、获取当前时间等。通常会使用Java 8的`java.time`包或者旧版的`java.util.Date`和`java.text....
总之,“Java工具类合集”是一个涵盖广泛、功能丰富的资源,它将帮助开发者简化常见任务,提升代码质量,降低项目复杂性。在实际开发中,合理使用这些工具类,能够大大提高开发效率,使代码更加简洁、可读,同时也有...
这意味着工具类只有一个全局访问点,且不允许通过构造函数创建实例,以确保其静态方法的独立性。 5. **线程安全**:考虑到多线程环境,工具类中的方法需要考虑线程安全问题。如果方法涉及共享状态,那么它们需要被...
2. 表选择与映射:用户可以选择一个或多个表,工具会将表的字段映射为实体类的属性。此外,还可以配置实体类的命名规则,如表名转换为驼峰命名或下划线命名。 3. 注解支持:实体类通常会包含诸如`@Entity`(JPA)、...
1. **ArrayList和LinkedList**: 这两个类是Java集合框架中的重要部分,分别实现了List接口。ArrayList基于动态数组,适用于随机访问,而LinkedList基于双向链表,适合于频繁插入和删除。 2. **HashMap和TreeMap**: ...
JavaUtils工具类是Java开发中常见的一类辅助代码集合,它们通常包含各种静态方法,用于简化常见的编程任务,提高开发效率。这篇博文链接(已提供但无法直接访问)可能详细探讨了JavaUtils工具类的设计原则、常用方法...
这些工具类通常包含了对字符串、数组、集合、日期时间等基本数据类型的操作,以及文件I/O、网络通信、线程控制等更复杂功能的辅助方法。下面将详细介绍`opslabJutil-master`这个工具类库可能包含的一些核心知识点。 ...
总结来说,"java常用工具类集合"是一个涵盖了多种实用工具类的资源,包括但不限于字符串处理、集合操作、日期时间、IO操作等多个方面。通过学习和应用这些工具类,开发者能够更高效地编写代码,同时也能从开源社区中...
总的来说,这个"java常用工具类已经打成jar包包含源码"的资源,是一个非常有价值的开发辅助工具,它提供了大量预封装的实用函数,方便了Java开发,并且源码的开放性使得学习和定制成为可能,对于提升开发效率和代码...
`StringUtils`是Apache Commons Lang库中的一个核心工具类,专门用于处理字符串。它提供了大量的静态方法,例如检查字符串是否为空、去除两端空白字符、分割字符串、替换子串、比较字符串等,极大地增强了Java标准...
Java的类加载器是基于“双亲委托模型”工作的,当试图加载一个类时,它会先询问父类加载器是否已经加载过该类,只有当父类加载器无法找到时,才会尝试自己加载。这个过程确保了核心类库的稳定性和安全性。 Java类...