使用 Profiler 类进行分析
分析器包含监控和子监控,我们可以使用分析器类提供的方法启动和停止它们。
要使用分析器类进行分析,请按照以下步骤操作。
步骤 1 - 实例化分析器类
通过传递表示探查器名称的字符串值来实例化探查器类。当我们实例化一个 Profiler 类时,将启动一个全局监控。
//Creating a profiler
Profiler profiler = new Profiler("Sample");
第 2 步 - 启动子监控
当我们调用 start() 方法它将启动一个新的子监控(命名),并停止较早的子监控(或时间仪器)。
调用 start() 的方法 Profiler 通过传递一个字符串值来表示要创建的子监控的名称。
//Starting a child stopwatch and stopping the previous one.
profiler.start("Task 1");
obj.demoMethod1();
创建这些监控后,您可以执行您的任务或调用那些运行您的任务的方法。
第 3 步:启动另一个子监控(如果您愿意)
如果需要,请使用 start()方法并执行所需的任务。如果您这样做,它将启动一个新的监控并停止前一个(即任务 1)。
//Starting another child stopwatch and stopping the previous one.
profiler.start("Task 2");
obj.demoMethod2();
第 4 步:停止手表
当我们调用 stop() 方法,它将停止最近的子监控和全局监控并返回当前的时间仪器。
// Stopping the current child stopwatch and the global stopwatch.
TimeInstrument tm = profiler.stop();
第五步:打印时间仪器的内容。
使用 print() 方法。
//printing the contents of the time instrument
tm.print();
例子
下面的示例演示了使用 SLF4J 的 Profiler 类的分析。这里我们做了两个示例任务,打印从 1 到 10000 的数字的平方和,打印从 1 到 10000 的数字的总和。我们试图获得这两个任务所用的时间。
import org.slf4j.profiler.Profiler;
import org.slf4j.profiler.TimeInstrument;
public class ProfilerExample {
public void demoMethod1(){
double sum = 0;
for(int i=0; i< 1000; i++){
sum = sum+(Math.pow(i, 2));
}
System.out.println("Sum of squares of the numbers from 1 to 10000: "+sum);
}
public void demoMethod2(){
int sum = 0;
for(int i=0; i< 10000; i++){
sum = sum+i;
}
System.out.println("Sum of the numbers from 1 to 10000: "+sum);
}
public static void main(String[] args) {
ProfilerExample obj = new ProfilerExample();
//Creating a profiler
Profiler profiler = new Profiler("Sample");
//Starting a child stop watch and stopping the previous one.
profiler.start("Task 1");
obj.demoMethod1();
//Starting another child stop watch and stopping the previous one.
profiler.start("Task 2");
obj.demoMethod2();
//Stopping the current child watch and the global watch.
TimeInstrument tm = profiler.stop();
//printing the contents of the time instrument
tm.print();
}
}
输出
执行后,上述程序生成以下输出 -
Sum of squares of the numbers from 1 to 10000: 3.328335E8
Sum of the numbers from 1 to 10000: 49995000
+ Profiler [BASIC]
|-- elapsed time [Task 1] 2291.827 microseconds.
|-- elapsed time [Task 2] 225.802 microseconds.
|-- Total [BASIC] 3221.598 microseconds.