代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

如何知道Java中调用特定方法的次数

  •  3
  • GuruKulki  · 技术社区  · 15 年前

    有没有办法知道一个类的实例调用了它的成员方法多少次?

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

    例如:

    class A{
            public void someMethod(){   
            }
    }
    

    我有个例子说

    A a = new A();
    

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

    7 回复  |  直到 15 年前
        1
  •  5
  •   Michael Borgwardt    15 年前

    如果您在程序中需要这些信息,这正是面向方面编程的意义所在。使用 AspectJ 很容易。 Spring AOP 也可能有效。

        2
  •  4
  •   Community CDub    8 年前

    实际上,AOP将是这里的正确工具,我将编写一个小方面来使用 JAMon (可以精确地收集 statistics such as hits, time statistics (avg,total,min,max), concurrency statistics and more )见 this previous 回答一个例子(或有点愚蠢)。如果您使用的是弹簧,则弹簧可以随时使用 JamonPerformanceMonitorInterceptor .

        3
  •  4
  •   bmargulies    15 年前

    根据修改代码的容易程度,您可以采用以下几种方法:

    • 只需按照您的建议添加计数器变量;如果您必须在许多地方添加它,这很笨拙,但很容易编码。
    • 将计数器代码放入其他实用程序类中,使用一个从所有相关位置调用的方法来“为此方法递增计数器”;然后,实用程序方法检查调用堆栈,例如via(new exception()).getStackTrace(),以查看谁在调用并递增相关计数器。
    • 使用提供此工具的探查器
    • 使用asm库添加计数器。
    • 在加载类时,使用Java工具框架来对相关方法的类定义进行即时修改;这可能是最灵活的——甚至可以是您还没有实际编写和无法修改的工具代码,也就是说,您不必更改要执行的实际类的代码。解开——但到目前为止,编码是最复杂的。
        4
  •  2
  •   Dmitry    15 年前

    您可以考虑使用配置文件,例如来自NetBeans或Yourkit的配置文件。

        5
  •  1
  •   JuanZe Nirbhay Tandon    15 年前

    那里有很多 Open Source Java Profilers .

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

        6
  •  1
  •   Ravi Gupta    15 年前

    如果你有权 JProbe 它将告诉您特定实例调用方法的次数。

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

        7
  •  1
  •   Roman    15 年前

    可以使用java.lang.reflect.proxy类。在Horstmann的《核心Java》中。第一卷详细介绍了这一技术。