【问题标题】:How can we measure the execution time of private methods as well?我们如何测量私有方法的执行时间呢?
【发布时间】:2012-06-16 14:43:14
【问题描述】:

我们使用拦截器来测量 bean 的公共方法调用的执行时间。然而,当一个 bean 的方法调用其他私有方法时,它似乎忽略了审计拦截器。

我们如何测量私有方法的执行时间?

【问题讨论】:

    标签: java performance jakarta-ee monitoring audit


    【解决方案1】:

    使用 AOP

    您可以使用Aspect-Oriented Programming 库(如AspectJ)实现基准测试。

    例如,请参阅:

    使用分析器

    • 您可以实现自己的代理扩展(例如,用于 JProfiler)。
    • 或者您可以放弃您的拦截器并简单地从任何探查器进行检查以捕获快照并记录执行时间。

    使用 JVMTI

    实际上,某些分析器会这样做。

    您可以求助于使用JVMTI API(老实说,不完全确定这会飞)到implement your own code inspector 并直接将自己挂接到JVM。


    偷偷摸摸和邪恶的内联问题

    关于 jb's (valid) concern in his answer 私有方法可能在编译时或运行时内联,一些 JVM 可能不会这样做或允许禁用此功能。

    • Oracle 的 JRockit 有一个 -XnoOpt 选项可以禁用优化(包括这个特定的优化)。
    • Oracle/Sun 的 HotSpot 至少曾经有 -XX:-Inline(不确定它是否仍然存在或有什么作用)。

    但是,这意味着当激活内联时,您无法准确衡量生产中的内容。不过,这对于检查您的代码可能很方便。

    【讨论】:

      【解决方案2】:

      EJB 容器在调用接口方法时应用拦截器 - 您的私有方法对其不可见。改用分析工具怎么样?

      【讨论】:

      • 我大部分时间都接受其他建议
      【解决方案3】:

      好吧,AFAIK 私有方法可以在 JVM lesiure 中内联(即使在编译时),因此它们无法被分析,因为它们可能不存在于字节码中。

      我想你可以标记你的方法 protected --- 这样它们即使在生产中也不会被内联,然后对其进行分析。

      如果您想分析您的测试实例,您可以尝试使用 visualvm --- visualvm 是一个非常好的选择。 VisualVM 是一个图形工具,用于分析 JVM 实例,它执行所有需要的检测。 http://visualvm.java.net/。此外,它是大多数 jdk 发行版中的标准工具。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2017-10-11
        • 2011-04-29
        • 2020-11-28
        相关资源
        最近更新 更多