你好,我是风一样的树懒,一个工作十多年的后端开发,曾就职京东、阿里等多家互联网头部企业。
在 Spring Boot 中,StopWatch 是一个用于计时和性能监控的工具类,主要用于 测量一段代码的执行时间。它可以帮助开发者轻松地在程序中进行性能分析,尤其适合用于对比不同操作的时间消耗,帮助优化代码或进行调试。
StopWatch 属于Spring Framework 提供的工具类,在 org.springframework.util.StopWatch 包下。它的核心功能是记录开始和结束时间,并且可以测量多个任务的执行时间。
创建 StopWatch 实例
开始计时
执行需要测量的任务
停止计时
获取执行时间
输出结果
import org.springframework.util.StopWatch;
public class StopWatchExample {
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
// 启动计时
stopWatch.start("Task 1");
// 执行任务(模拟耗时操作)
Thread.sleep(1000);
// 结束计时
stopWatch.stop();
// 启动下一个任务
stopWatch.start("Task 2");
// 执行另一个任务(模拟耗时操作)
Thread.sleep(500);
// 结束计时
stopWatch.stop();
// 打印结果
System.out.println(stopWatch.prettyPrint());
}
}
start(String taskName)
启动计时,taskName 用于标识这段任务。可以多次调用 start 方法来启动多个任务。
stop()
停止当前的计时任务,记录下当前任务的执行时间。如果没有调用 start 方法,调用 stop 会抛出异常。
getTotalTimeMillis()
获取所有任务的总执行时间,单位是毫秒。
getTaskCount()
获取已经启动并执行的任务数。
getTaskInfo()
获取所有任务的详细信息。返回一个 TaskInfo[] 数组,包含每个任务的名称、执行时间、任务状态等信息。
prettyPrint()
格式化输出任务的执行信息。返回一个易于阅读的字符串,包含了每个任务的执行时间等详细信息。
假设你有两个任务分别花费了 1 秒和 500 毫秒,prettyPrint() 输出大致会是:
StopWatch '': running time = 1.5 seconds
-----------------------------------------
task 'Task 1' running time = 1.000 seconds
task 'Task 2' running time = 0.500 seconds
-----------------------------------------
Total running time = 1.500 seconds
性能调优
StopWatch 常用于程序调试和性能优化,通过测量各个方法或代码块的执行时间,开发者可以定位哪些操作是瓶颈,进而进行优化。
对比不同实现的性能
比如比较同一个功能用不同方式(如并发与串行、不同算法等)的实现时间差异。
监控特定代码块的执行时间
在处理高并发或者复杂业务逻辑时,可以用它来监控各个步骤的耗时,从而精确判断性能瓶颈所在。
StopWatch 是一种轻量级的计时工具,适合用于单一进程的性能监控,并不依赖于外部工具。
若你需要更复杂的性能分析,如内存消耗、线程分析等,可以考虑使用如 JProfiler、VisualVM、JMH 等工具。
Spring Boot 作为一个基于 Spring 的开发框架,通常会集成很多性能监控工具(例如 Spring Actuator)。StopWatch 作为一个工具类,可以结合 Spring Boot 应用进行性能分析:
在控制器中记录某些业务操作的执行时间。
在服务层中测量不同功能的执行时间,例如数据库操作、外部 API 调用等。
集成 Spring Boot Actuator,与其他性能监控工具一起使用。
虽然 StopWatch 可以帮助开发者单独分析性能,但是在大型应用中,Spring Boot Actuator 提供了更全面的监控能力,可以用来与 StopWatch 等工具配合,实现更高效的性能监控。
看完本篇,你以后写监控一个方法的调用时间有了新的思路了没有,还有不断的加各种log时间来写么?
今天的内容就分享到这儿,喜欢的朋友可以关注,点赞。有什么不足的地方欢迎留言指出,您的关注是我前进的动力!