如何查找代码执行的次数?

时间:2018-04-27 07:38:45

标签: java

假设我的web应用程序中的普通java类中有一个方法。我想在5分钟内得到if和else块执行的计数。 你会怎么做?

3 个答案:

答案 0 :(得分:3)

有几种方法可以实现目标。例如,您可以创建一个“计数器”类,它使用某个类/方法名称进行实例化。然后,无论何时输入,方法本身都会调用计数器。

这样做的缺点当然是你现在混合责任。您的业​​务方法应该执行业务工作。它不应该知道或做任何有关跟踪其调用的事情!

因此,这将是使用某种面向方面编程的一个很好的例子!含义:“计数”调用是一个方面,理想情况下,它定义并“附加”到方法,而不用在方法体中“手动”执行。因此,如果您使用的是支持AOP的Spring等框架,那么这将是首选的选项。

除此之外:在这里也可以使用某种 instrumentation 框架。你知道,任何合理的 profiler 都应该能够为你提供这样的数字。

因此,真正的答案是明确您的要求 - 因为有非常不同的选项,这取决于您打算在此解决的问题。

答案 1 :(得分:1)

在当前类中使用计数器+计时器是脏的:混合责任由GhostCast加下划线 使用AOP /生成的代理类是可能的,但对于这样一个简单的要求,它似乎有点过分。如果您需要计算10种或更多方法的调用,您应该认真考虑这些方法。

但是对于一种观察方法,我倾向于使用Observable / Observer模式,其中您要观察调用的类是Observable,我会移动计数器和计时器逻辑来重置Observer类中的计数器。
它会给这个问题:

1)观察者将自己注册到Observable中 2)Observable在每次调用时调用Observer 3)观察者因此增加计数器
4)观察者通过每5 mn的计时器重置计数器

答案 2 :(得分:0)

使用静态字段存储startTime,if-和elseCounters。每次执行检查5分钟是否已经消失:

if ((System.getTimeMillis() - startTime) > (5 * 60 * 1000)) {
  reset fields;
  print out the counters;
} else {
  increase counters;
}