首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 性能測試利器 StopWatch 對比:Spring/Guava/Commons-Lang 三大實現差異分析

     編輯:Java 綜合教學

Java 性能測試利器 StopWatch 對比:Spring/Guava/Commons-Lang 三大實現差異分析

Java 生態中有三個主流 StopWatch 實現,API 設計差異較大。本文通過實測代碼對比 Spring、Guava、Commons-Lang 三者用法,推薦最佳選擇。

三大實現對比表

庫類全路徑特點推薦指數
Springorg.springframework.util.StopWatch任務分組、統計報告豐富、線程不安全⭐⭐⭐⭐⭐
Guavacom.google.common.base.Stopwatch不可變、線程安全、納秒精度、流式 API⭐⭐⭐⭐
Commons-Langorg.apache.commons.lang3.time.StopWatch可繼承、支持暫停/恢復、分割計時⭐⭐⭐

Spring StopWatch 實戰(推薦)

import org.springframework.util.StopWatch;

public class PerfTest {
    public static void main(String[] args) {
        StopWatch sw = new StopWatch("DB操作性能測試");
        
        sw.start("查詢用戶");
        userDao.findAll();
        sw.stop();
        
        sw.start("插入訂單");
        orderDao.insert(order);
        sw.stop();
        
        sw.start("發送郵件");
        mailService.send();
        sw.stop();
        
        // 多種輸出格式
        System.out.println(sw.prettyPrint());      // 格式化表格
        System.out.println(sw.shortSummary());     // 簡短摘要
        System.out.println("總耗時: " + sw.getTotalTimeMillis() + "ms");
        System.out.println("任務數: " + sw.getTaskCount());
    }
}

輸出示例:

StopWatch 'DB操作性能測試': running time (millis) = 411
-----------------------------------------
ms     %     Task name
-----------------------------------------
00011  003%  查詢用戶
00400  097%  插入訂單
00000  000%  發送郵件
Short summary: 411 ms

Guava Stopwatch 實戰

import com.google.common.base.Stopwatch;
import java.util.concurrent.TimeUnit;

Stopwatch sw = Stopwatch.createStarted();
// ... 業務代碼 ...
sw.stop();
System.out.println("耗時: " + sw.elapsed(TimeUnit.MILLISECONDS) + " ms");
// 或
System.out.println(sw);  // 輸出: 123.4 ms

Commons-Lang StopWatch 實戰

import org.apache.commons.lang3.time.StopWatch;

StopWatch sw = new StopWatch();
sw.start();
// ... 
sw.split();  // 分割點
// ...
sw.stop();

選型建議

  • Spring 項目:直接用 org.springframework.util.StopWatch,無額外依賴,報告最豐富
  • 微服務/高併發:Guava Stopwatch 線程安全、不可變,適合並發環境
  • 需暫停/恢復/分割:Commons-Lang 功能最全
  • 基準測試:嚴肅性能測試請用 JMH (Java Microbenchmark Harness)

注意事項

  • Spring StopWatch 非線程安全,多線程環境每線程一實例
  • 測試預熱:先跑幾輪讓 JIT 編譯,再正式測量
  • 避免在測試代碼中輸出日志,影響準確性
  • 納秒精度:System.nanoTime() 而非 currentTimeMillis()

總結

Spring StopWatch 以豐富的統計報告、零依賴(Spring 項目)、直觀 API 成為日常性能排查首選。理解三者差異,按場景選型,事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved