Java统计代码段的执行时间

简介: 版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/80180571 通常在进行代码测试和代码优化的时候,会想要知道代码执行时每段代码的执行时间,以便进行代码优化和调整。
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/80180571

通常在进行代码测试和代码优化的时候,会想要知道代码执行时每段代码的执行时间,以便进行代码优化和调整。

下面封装的类是利用代码段标记和执行时间差进行统计。使用时,仅需要在代码段中加入CodeTimer.set("标记");就可以了,打印 时调用CodeTimer.print();统计字段有代码段、总时间(纳秒)、执行次数、平均时间。

封装类:

/**
 * 统计代码段执行时间。
 * 在需要进行统计的代码段调用CodeTimer.set()方法进行标记。
 * 打印时调用CodeTimer.print()方法
 */
public class CodeTimer {
    private static String lastMark = "start";
    private static long lastTime = System.nanoTime();
    private static final Map<String, Long> timeMap = new LinkedHashMap<String, Long>();
    private static final Map<String, Long> timeHappenCount = new LinkedHashMap<String, Long>();

    public static void set(int mark) {
        set("" + mark);
    };

    public static void set(String mark) {
        long thisTime = System.nanoTime();
        String key = "[" + lastMark + "]->[" + mark + "]";
        Long lastSummary = timeMap.get(key);
        if (lastSummary == null)
            lastSummary = 0L;

        timeMap.put(key, System.nanoTime() - lastTime + lastSummary);
        Long lastCount = timeHappenCount.get(key);
        if (lastCount == null)
            lastCount = 0L;

        timeHappenCount.put(key, ++lastCount);
        lastTime = thisTime;
        lastMark = mark;
    };

    public static void print() {
        Integer a = 0;
        System.out.println(
                String.format("%25s %18s %18s %18s",
                    "PROCESS", "TOTAL_TIME", "REPEAT_TIMES", "AVG_TIME"));
        for (Entry<String, Long> entry : timeMap.entrySet()) {
            System.out.println(
                String.format("%25s %18s %18s %18s", entry.getKey(),
                    String.format("%,d", entry.getValue()), timeHappenCount.get(entry.getKey()),
                    String.format("%,d", entry.getValue() / timeHappenCount.get(entry.getKey()))));
        }
    }
}

打印出的效果形如:

                  PROCESS         TOTAL_TIME       REPEAT_TIMES           AVG_TIME
             [start]->[0]            152,312                  1            152,312
                 [0]->[4]         12,223,365                  1         12,223,365
                [4]->[10]            101,838                  6             16,973
                [10]->[8]          1,246,189                 34             36,652
                 [8]->[5]        489,096,299                 34         14,385,185
                 [5]->[6]        122,247,497                 34          3,595,514
                 [6]->[7]      2,686,057,029                 34         79,001,677
                 [7]->[1]             22,334                  1             22,334
                 [1]->[9]            911,191                  1            911,191




相关文章
|
1月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
34 1
|
3月前
|
人工智能 算法 Java
第十三届蓝桥杯B组Java(试题C:字符统计)
第十三届蓝桥杯B组Java(试题C:字符统计)
53 0
|
7月前
|
搜索推荐 Java
【Java每日一题,字典树】 统计难题
【Java每日一题,字典树】 统计难题
|
1月前
|
存储 Java API
Java统计功能
Java统计功能
14 0
|
2月前
|
Java
java字符串练习题4、统计一行字符串中所有的字符类型数量
java字符串练习题4、统计一行字符串中所有的字符类型数量
29 0
|
3月前
|
Java C++ Python
Rust每日一练(Leetday0016) 全排列I\II、旋转图像
Rust每日一练(Leetday0016) 全排列I\II、旋转图像
22 0
Rust每日一练(Leetday0016) 全排列I\II、旋转图像
|
3月前
|
算法 C++ Java
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
28 0
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
|
3月前
|
Java API Scala
【Flink】Flink Java 统计词频 开发
【1月更文挑战第26天】【Flink】Flink Java 统计词频 开发
|
8月前
|
Java C语言
字符串统计-C语言/Java
字符串统计-C语言/Java
70 0
|
8月前
|
SQL XML Java
Java项目查询统计表中各状态数量
where中按需求加条件,resultType中使用HashMap时,可能展示时的顺序与查询结果顺序不同,因此使用LinkedHashMap。表中设计2个状态字段,每个字段有3种状态,统计这6个状态各自的数量。框架:SpringBoot,Mybatis;以下仅设计为最简单的使用方式,有具体需求按需求增加逻辑。效果达到了,接下来就是在项目中实际使用。在自定义sql的xml中代码如下。sql查询语句及结果如图。
114 0