Spring 工具類:StopWatch

StopWatch 是 Spring 框架提供的一個簡單而強大的計時工具類,用于測量代碼塊的執行時間。它特別適合在開發階段進行性能分析、調試和優化。

基本使用方法

// 創建 StopWatch 實例(可指定 ID)
StopWatch stopWatch = new StopWatch("性能分析");// 任務1 開始計時
stopWatch.start("任務1");
try {Thread.sleep(500); // 模擬任務執行
} finally {stopWatch.stop();  // 任務1 計時結束
}// 任務2 開始計時
stopWatch.start("任務2");
try {Thread.sleep(1200);
} finally {stopWatch.stop();  // 任務2 計時結束
}// 任務3(嵌套任務)
stopWatch.start("復雜計算");
try {// 子任務3.1stopWatch.start("矩陣運算");Thread.sleep(300);stopWatch.stop();// 子任務3.2stopWatch.start("向量處理");Thread.sleep(200);stopWatch.stop();
} finally {stopWatch.stop(); // 停止復雜計算任務
}

獲取總耗時

// 毫秒
long totalTimeMillis = stopWatch.getTotalTimeMillis();// 秒
double totalTimeSeconds = stopWatch.getTotalTimeSeconds();// 納秒
long totalTimeNanos = stopWatch.getTotalTimeNanos();

獲取單個任務耗時

// 獲取所有任務信息
StopWatch.TaskInfo[] tasks = stopWatch.getTaskInfo();
for (StopWatch.TaskInfo task : tasks) {System.out.printf("任務: %-15s 耗時: %6dms (%.1f%%)%n", task.getTaskName(), task.getTimeMillis(), (double) task.getTimeMillis() / totalTimeMillis * 100);
}

格式化輸出

// 簡潔輸出
System.out.println(stopWatch.shortSummary());// 格式化表格輸出
System.out.println(stopWatch.prettyPrint());

輸出格式如下

StopWatch '性能分析': running time = 2200943100 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
0500664900  023%  任務1
1199987500  055%  任務2
0500290700  023%  復雜計算

高級用法

條件計時(可實現測試環境記時而生產環境不記時)

public class ConditionalStopWatch extends StopWatch {private final boolean enabled;public ConditionalStopWatch(String id, boolean enabled) {super(id);this.enabled = enabled;}@Overridepublic void start(String taskName) throws IllegalStateException {if (enabled) super.start(taskName);}@Overridepublic void stop() throws IllegalStateException {if (enabled) super.stop();}
}// 使用示例(僅在開發環境啟用)
boolean isDevMode = true;
ConditionalStopWatch devWatch = new ConditionalStopWatch("開發監控", isDevMode);

使用注意事項

  • 合理命名任務:使用清晰的任務名稱(如 “用戶查詢”、“訂單處理”)

  • 避免生產環境使用:StopWatch 主要用于開發調試,生產環境考慮專業 APM 工具

  • 注意嵌套任務:確保 start/stop 調用成對出現

  • 使用 try-finally:確保在異常情況下也能停止計時

完整示例

public class StopWatchDemo {public static void main(String[] args) throws InterruptedException {// 創建 StopWatch 實例StopWatch stopWatch = new StopWatch("API 性能分析");// 模擬API處理流程stopWatch.start("請求解析");Thread.sleep(80);stopWatch.stop();stopWatch.start("身份驗證");Thread.sleep(120);stopWatch.stop();stopWatch.start("業務處理");processBusinessLogic(stopWatch);stopWatch.stop();stopWatch.start("響應構建");Thread.sleep(60);stopWatch.stop();// 輸出結果System.out.println("\n===== 性能分析報告 =====");System.out.println(stopWatch.shortSummary());System.out.println(stopWatch.prettyPrint());// 獲取詳細信息System.out.println("總耗時: " + stopWatch.getTotalTimeMillis() + "ms");System.out.println("最耗時的任務: " + stopWatch.getLastTaskName());}private static void processBusinessLogic(StopWatch parentWatch) throws InterruptedException {parentWatch.start("數據庫查詢");Thread.sleep(200);parentWatch.stop();parentWatch.start("數據轉換");Thread.sleep(150);parentWatch.stop();parentWatch.start("緩存處理");Thread.sleep(100);parentWatch.stop();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93227.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決 VSCode 運行 Python 時 ModuleNotFoundError: No module named ‘open_webui‘ 問題

目錄 1. 問題原因分析 2. 解決思路 3. 解決步驟 3.1 打開或創建 .vscode/launch.json 3.2 添加調試配置 3.3 配置說明 3.4 運行測試 4. 總結 在使用 VSCode 調試 Python 項目時,我們經常會遇到類似下面的錯誤: Exception has occurred: ModuleN…

Python基礎-數據結構

數據結構 Python提供了四種主要的內置數據結構:列表(List)、元組(Tuple)、字典(Dictionary)和集合(Set)。每種數據結構都有其特定的用途和特性。 Python數據結構概覽&…

NLP學習之Transformer(1)

初識 Transformer (1) 1.簡介 1.1主要特點: self-attention: 自注意力機制,Transformer的核心是自注意力機制,它允許模型在處理某個位置的輸入時,能夠直接與其他位置的輸入交互,而不…

C語言筆記6:C高級 part1

1.gcc 編譯器 編譯流程 預處理-》編譯》匯編》鏈接》 E 預處理的命令 S 編譯匯編代碼 -c匯編階段命令 -o 輸出對應的文件GDB調試工具2.作用域存儲分類// C高級部分知識多, 加上這周 我學的知識量有點爆炸。家里又有事情,這周末要回老家 爭取下周補齊吧。…

A12預裝app

在A12上預裝應用,出現了一個異常。在此記錄問題描述:在A12上預裝應用按照A13的預裝方案報錯,mk文件如下:LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS : optional LOCAL_MODULE : Tideen_PTT LOCAL_MODU…

termios 線程 poll epoll進化 二叉AVL紅黑樹

struct termios tio 是什么 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h>#define SERIAL_PORT "/dev/ttyS0" #define BUF_SIZE 256int main(v…

C++設計模式:類間關系

類封裝了數據和行為&#xff0c;是面向對象的重要組成部分&#xff0c;它是具有相同屬性、操作、關系的對象集合的總稱。在系統中&#xff0c;每個類都具有一定的職責&#xff0c;職責指的是類要完成什么樣子的功能&#xff0c;要承擔什么樣子的義務。一個類可以有多種職責&…

MSYS2+CMake配置C/C++開發環境

目錄一、MSYS2是什么1.1 核心架構與組件??1.1.1 背景介紹1.1.1.1 Cygwin1.1.1.2 MinGW和Mingw-w641.1.1.3MSYS和MSYS21.1.2 技術基礎??1.1.3 多環境支持??1.2 核心功能??1.2.1 類Unix開發環境??1.2.2 開發工具鏈??1.2.3 軟件倉庫與包管理??二、安裝和配置2.1 配置…

Vue 3 + TypeScript:package.json 示例 / 詳細注釋說明

一、示例 / 詳細注釋說明 {// 項目基礎信息"name": "vite-project", // 項目名稱&#xff08;建議使用 kebab-case 格式&#xff09;"private": true, // 標記為私有項目&#xff0c;避免意外發布到 npm"version": "1.0.…

SpatialVLM和SpatialRGPT論文解讀

目錄 一、SpatialVLM 1、概述 2、方法 3、實驗 二、SpatialRGPT 1、概述 2、方法 3、訓練方法 4、實驗 一、SpatialVLM 1、概述 SpatialVLM是最早的依賴傳統VLMs實現3D空間推理能力的論文&#xff0c;在24年1月由DeepMind團隊提出&#xff0c;當時對比的還是GPT4v&am…

理解GPU架構:基礎與關鍵概念

GPU 基礎概述&#xff1a;從圖形渲染到 AI 與高性能計算的核心 Graphics Processing Units&#xff08;GPU&#xff09;已從專用的圖形渲染硬件演進為 AI、科學計算與高性能任務的中堅力量。本文將介紹 GPU 架構的基礎知識&#xff0c;包括其組成部分、內存層次結構&#xff0c…

訂單狀態定時處理(Spring Task 定時任務)

訂單狀態定時處理 如果最后一秒剛好支付了咋辦?如何補償? 需要將支付狀態和訂單狀態一起考慮,或者直接使用狀態機 Spring Task 是Spring框架提供的任務調度工具,可以按照約定的時間自動執行某個代碼邏輯。 **定位:**定時任務框架 **作用:**定時自動執行某段Java代碼 …

職得AI簡歷-免費AI簡歷生成工具

本文轉載自&#xff1a;職得AI簡歷-免費AI簡歷生成工具 - Hello123工具導航 ** 一、核心功能解析 職得 AI 簡歷是 AI 驅動的智能求職平臺&#xff0c;通過深度學習算法分析百萬優質簡歷數據&#xff0c;提供從簡歷生成到面試準備的全流程服務&#xff0c;顯著提升求職競爭力。…

8.14 機器學習(1)

機器學習基礎一、什么是機器學習定義&#xff1a;讓計算機利用大量數據在特定任務上持續改進性能的過程&#xff0c;可以讓任務完成的更好。機器學習的領域很多。二、機器學習基本術語數據集、樣本、特征&#xff08;屬性&#xff09;、屬性空間、向量表示、訓練集&#xff08;…

給電腦升級內存,自檢太慢,以為出錯

公司電腦是16G內存&#xff0c;用虛擬機時非常吃力。于是跟領導說&#xff0c;買了32G內存和1T SSD。電腦有兩個SATA數據線&#xff0c;SATA電源頭只有一個。于是買了幾個1轉2&#xff0c;順利接上。把原來的16G拔下&#xff0c;換上32G內存。結果開機沒反應。心里就有點嘀咕&a…

Effective C++ 條款43:學習處理模板化基類內的名稱

Effective C 條款43&#xff1a;學習處理模板化基類內的名稱核心思想&#xff1a;模板化基類&#xff08;templatized base classes&#xff09;中的名稱在派生類模板中默認不可見&#xff0c;需要通過this->前綴、using聲明或顯式基類限定來引入。這是因為編譯器在解析模板…

Mybatis簡單練習注解sql和配置文件sql+注解形式加載+配置文件加載

項目結構 d:\test\runjar\data\static\data\mybatis_helloworld\Mybatis\ ├── lib\ │ ├── asm-3.3.1.jar │ ├── c3p0-0.9.1.2.jar │ ├── cglib-2.2.2.jar │ ├── commons-logging-1.1.1.jar │ ├── ehcache-core-2.6.8.jar │ ├── javassi…

抗日勝利80周年 | HTML頁面

飛翔的和平鴿&#xff1b;屹立的人民英雄紀念碑&#xff1b;倒下的日本國旗&#xff1b;旋轉的金色勛章無不代表著我們勝利了&#xff01;&#xff01;&#xff01;HTML源代碼&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta cha…

web仿寫網站

一、完成自己學習的官網&#xff0c;至少三個不同的頁面。1、界面1&#xff08;1&#xff09;代碼<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

基于element-plus和IndexedDB數據庫的基礎表單

本文介紹了基于Vue 3和Element Plus的表單項目配置頁面實現。頁面包含搜索欄、操作按鈕、數據表格和分頁組件&#xff0c;使用IndexedDB進行本地數據存儲。主要功能包括&#xff1a;1) 通過模糊查詢搜索項目&#xff1b;2) 分頁顯示項目數據&#xff1b;3) 添加/編輯/刪除項目操…