使用@Timed
注释,我们可以计算方法运行所需的时间:
@Timed
public void loopInput(int counter){
for (int i = 0; i < counter; i++){
i++;
}
}
但是,假设我们的方法有一些输入,其大小可以显着改变运行该方法所需的时间(如上面的示例所示)。
如果没有一些有关输入大小的额外潜在信息,@Timed
给出的时间测量是否毫无意义?
如果输出大小不同,它也将毫无意义:
@Timed
public void printStudentCourses(int studentId){
//get student from DB
// ...
for (Course cource: Student.getCourses()) {
System.out.println(cource);
}
}
当然,打印类(class)列表较多的学生会需要更长的时间。
所以:
- 我们可以从
@Timed
测量中获得哪些真正的见解? - 有没有办法为
@Timed
测量添加一些附加信息?
最佳答案
@Timed
是添加计时器的简单方法。这对于了解一个方法花费的时间很有用,并让您质疑为什么它花费的时间比预期的要长。仅这些数据就会告诉您可能存在异常值,并且需要单独测量这些异常值。
为了获得单独的见解,添加有助于区分不同计时器的标签可能是值得的。
在这里,我根据迭代的数量添加一个标签(桶可能是 1、2-5、>5)
public void printStudentCourses(int studentId){
//get student from DB
// ...
Metrics.timer("my.timer", Tags.of("bucket", chooseBucket(student.getCourses().size()))).record(() -> {
for (Course course: student.getCourses()) {
//Assuming there is something more expensive worth measuring here
System.out.println(course);
}
})
}
关于java - 使用 @Timed 注释对方法进行计时 - 与输入大小相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50086960/