我们使用拦截器来测量bean的公共方法调用的执行时间。尽管如此,当bean的方法调用其他私有方法时,它似乎忽略了审计拦截器。
我们如何衡量私人方法的执行时间呢?
答案 0 :(得分:5)
您可以使用Aspect-Oriented Programming等AspectJ库来实施基准测试程序。
例如,见:
实际上,某些分析师会这样做。
你可以使用JVMTI API(不完全确定这会飞到,诚实地)到implement your own code inspector并直接挂钩到JVM。
关于jb's (valid) concern in his answer私有方法可能在编译时或运行时内联,一些JVM可能不会这样做或允许禁用此功能。
-XnoOpt
选项可以禁用优化(包括这个特定的优化)。-XX:-Inline
(不确定它是否仍然存在或做了什么)。但是,这意味着在激活内联时,您无法准确测量生产中的内容。但是,检查代码可能很方便。
答案 1 :(得分:1)
EJB容器在调用接口方法时应用拦截器 - 您的私有方法对它是不可见的。那么使用分析工具呢?
答案 2 :(得分:1)
AFAIK私有方法可以在JVM文件中内联(即使在编译时),因此它们不能被分析,因为它们可能不存在于字节码中。
我想你可以标记你的方法protected
---所以即使在制作中它们也不会被内联,然后对它进行分析。
如果你想对你的测试实例进行概要分析,你可以尝试使用visualvm --- visualvm是一个非常好的选择。 VisualVM是一个图形工具,用于分析JVM所有需要的工具。 http://visualvm.java.net/。此外,它是大多数jdk发行版中的标准工具。