java 或 安卓项目中耗时统计工具类

相信大家在实际工具中,经常需要做性能分析,做性能分析就少不了代码执行的耗时分析,以下是比较实用的耗时统计工具,我在项目中应用过,使用比较方便

java 复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 描述:
 * 创建者: IT乐手
 * 日期: 2025/7/31
 */
public class TimeMonitor {
    private static final HashMap<String, Long> startTimeMap = new HashMap<>();
    private static final StringBuilder stringBuilder = new StringBuilder();
    private static final AtomicInteger taskCounter = new AtomicInteger(0);
    private static Timer timer = null;
    /**
     * 开始统计某个任务的耗时
     * @param taskName 任务名(可区分不同统计点)
     */
    public static void start(String taskName) {
        AtotoLogger.i("TimeMonitor", "Start monitoring task: " + taskName);
        checkTimeout();
        startTimeMap.put(taskName, System.currentTimeMillis());
    }

    /**
     * 结束统计,并返回耗时(毫秒)
     * @param taskName 任务名
     * @param isLast 最后的任务
     * @return 耗时(ms),如未调用 start 返回-1
     */
    public static void end(String taskName, boolean isLast) {
        AtotoLogger.i("TimeMonitor", "End monitoring task: " + taskName + ", isLast: " + isLast);
        checkTimeout();
        Map<String, Long> map = startTimeMap;
        Long startTime = map.get(taskName);
        if (startTime == null) {
            return;
        }
        long duration = System.currentTimeMillis() - startTime;
        map.remove(taskName); // 防止内存泄漏

        // 统计任务数量
        int taskCount = taskCounter.incrementAndGet();
        // 输出日志
        stringBuilder.append(taskCount).append(".")
                     .append(taskName)
                     .append(", 耗时: ")
                     .append(duration)
                     .append(" ms\n");
        if (isLast) {
            AtotoLogger.i("TimeMonitor", stringBuilder.toString());
            stringBuilder.setLength(0); // 清空 StringBuilder
            taskCounter.set(0); // 重置任务计数器
        } else {
            AtotoLogger.i("TimeMonitor", taskCount + ". " + taskName + ", 耗时: " + duration + " ms");
        }
    }


    public static void end(String taskName) {
        end(taskName, false);
    }

    private static void checkTimeout() {
        if (timer != null) {
            timer.cancel();
            timer = null; // 取消之前的定时器
        }
        timer = new Timer("TimeMonitorTimer");
        timer.schedule(
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        clear();
                        // 这里可以添加定时任务的逻辑
                    }
                }, 10000); // 每10秒执行一次
    }
    /**
     * 清理该线程下的所有统计数据
     */
    public static void clear() {
        AtotoLogger.i("TimeMonitor", stringBuilder.toString());
        stringBuilder.setLength(0); // 清空 StringBuilder
        startTimeMap.clear();
        if (timer != null) {
            timer.cancel();
            timer = null; // 取消之前的定时器
        }
    }
}
相关推荐
百锦再3 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
JH30734 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
2501_916008894 小时前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
玉梅小洋5 小时前
Windows 10 Android 构建配置指南
android·windows
invicinble5 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟5 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖5 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
Libraeking6 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计