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




相关文章
|
6月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
83 1
|
6月前
|
人工智能 算法 Java
第十三届蓝桥杯B组Java(试题C:字符统计)
第十三届蓝桥杯B组Java(试题C:字符统计)
90 0
|
3月前
|
Java
Java系列之 查看某一部分代码执行时间长短
这篇文章介绍了如何在Java中测量某段代码或方法的执行时间,通过记录执行前后的系统当前时间毫秒数,然后计算两者的差值得到执行时间,示例中展示了如何使用`System.currentTimeMillis()`来测量一个循环方法的执行时长。
Java系列之 查看某一部分代码执行时间长短
|
3月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
42 0
|
5月前
|
Java Serverless
Java字符个数统计代码
Java字符个数统计代码
84 6
|
5月前
|
Java
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
|
5月前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
50 0
|
6月前
|
XML Java Maven
java 常用代码段
java 常用代码段
27 1
|
6月前
|
存储 Java API
Java统计功能
Java统计功能
59 0
|
6月前
|
Java API Scala
【Flink】Flink Java 统计词频 开发
【1月更文挑战第26天】【Flink】Flink Java 统计词频 开发