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

时间:2012-06-13 15:30:21

标签: java performance java-ee monitoring audit

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

我们如何衡量私人方法的执行时间呢?

3 个答案:

答案 0 :(得分:5)

使用AOP

您可以使用Aspect-Oriented ProgrammingAspectJ库来实施基准测试程序。

例如,见:

使用Profiler

  • 您可以实现自己的代理扩展(例如,对于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(不确定它是否仍然存在或做了什么)。

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

答案 1 :(得分:1)

EJB容器在调用接口方法时应用拦截器 - 您的私有方法对它是不可见的。那么使用分析工具呢?

答案 2 :(得分:1)

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

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

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