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是一个可扩展的架构。