Perf4j主要的用途是計量代碼性能和分析性能數據。
為什么要使用這個工具呢?我們可以聯想下最早期java開發者調試代碼使用的方式,以前沒有日志框架,那java開發就使用System.out.println()來輸出自己想查看的變量。但是這樣項目上線的話,就要去掉這些打印語句以減少性能影響。那萬一在線上出問題了,調試哪里出問題就很麻煩,因為沒有輸出的日志可查。所以后來有人開發了日志框架,通過日志級別控制日志的輸出。
類似的,如果沒有perf4j,我們在查看代碼運行時間的話可以用以下代碼來實現:
long start = System.currentTimeMillis();
// execute the block of code to be timed
System.out.println("ms for block n was: " + (System.currentTimeMillis() - start));
這種方式有幾個缺點:
1、 這種方式輸出內容比較單一,就是代碼總的運行時間。但是我們代碼需要查看的性能指標有更多,比如總的平均值,最小值,最大值,tps等等。
2、 也許我們的代碼在線上運行,我們想把這些值通過圖表的形式展示出來。或者把這些內容通過jmx輸出。
3、 另外,我們可能把perf4j跟log4j,slf4j等日志框架和日志門面系統整合起來。
基于以上這些問題,所以開源社區就出現了perf4j(人多力量大,社區的力量就是強大)。
Perf4j一些特性:
l 簡單的停止查看機制來計算語句時間消耗輸出。
l 命令行解析log文件產生匯總數據和圖表。
l 簡單的集成日志框架和門面框架。
l 自定義log4j和logback的appenders來產生數據和圖表。
l 通過jmx查看性能指標,并根據閾值發送消息。
l Web工程可以通過servlet來輸出性能指標。
l Perf4j可以和aop等切面框架整合起來輸出性能指標。
l Perf4j是一個可擴展的架構。