如何知道,在java中调用特定方法的次数

时间:2010-01-25 12:50:57

标签: java aop

有没有办法知道类的实例调用其成员方法的次数。

我认为(不确定),一种方法是为方法设置一个专用的成员变量,但如果我们有这么多方法,这将是不可行的。

例如:

class A{
        public void someMethod(){   
        }
}

我有一个实例说

A a = new A();

所以我想知道a在程序中调用someMethod的次数。 我们可以有许多方法。

7 个答案:

答案 0 :(得分:5)

如果您需要在程序中使用此信息,这正是面向方面编程的目的。使用AspectJ,这将非常容易。 Spring AOP可能也会有用。

答案 1 :(得分:4)

您可以采取一些方法,具体取决于您可以轻松修改代码:

  • 按照您的建议添加计数器变量;笨拙如果你必须在很多地方添加它,但很容易编码
  • 将您的计数器代码放在其他实用程序类中,使用一个方法从所有相关位置调用“此方法的增量计数器”;然后,所讨论的实用方法检查调用栈 - 例如via(new Exception())。getStackTrace() - 查看谁在调用并递增相关计数器
  • 使用提供此功能的分析器
  • 使用ASM库添加计数器。
  • 使用Java检测框架在加载类时动态修改相关方法的类定义;这可能是最灵活的 - 您甚至可以检测自己实际上没有编写并且无法修改的代码,这意味着您不必更改要执行的实际类的代码 - - 但它是迄今为止最复杂的代码。

答案 2 :(得分:4)

事实上,AOP在这里是正确的工具,我会写一些方面来使用JAMon(可以精确地收集statistics such as hits, time statistics (avg,total,min,max), concurrency statistics and more)。请参阅this previous答案以获取示例(或稍微说一下)。如果您使用的是Spring,那么Spring可以使用JamonPerformanceMonitorInterceptor

答案 3 :(得分:2)

您可以考虑使用分析器,例如一个来自NetBeans或YourKit等。

答案 4 :(得分:1)

有很多Open Source Java Profilers

分析器执行动态程序分析(与静态代码分析相反),并显示程序的行为,在程序执行时收集信息。其中一些分析器显示方法调用统计信息。

答案 5 :(得分:1)

如果您有权访问JProbe,它会告诉您特定实例调用方法的次数。

他们说MAT也很好而且是免费的,我还没试过。

答案 6 :(得分:1)

可以使用java.lang.reflect.Proxy类。在Horstmann的书“核心Java”中。第I卷'详细描述了这种技术。