我想在java中打印方法的执行时间。目前我正在使用以下代码,
long startTime = System.currentTimeMillis();
// method body
long runTime= System.currentTimeMillis() - startTime;
System.out.println(" XYZ Method execution time: " + runTime);
有很多方法我想在项目中找到运行时,有没有办法阻止在每个方法中编写这段代码?
该项目使用Spring 2.5,Struts 2。
编辑:我不想将逻辑添加到每个方法,我想,比如说,写一次逻辑并使用某种配置,我可以指定我需要打印执行时间的方法。因此,无论何时执行该方法,都应自动将运行时打印到控制台。一种方式是我所说的是将代码添加到序言和尾声中,但我不想编辑方法,因为这会耗费时间并且编写相同的代码不是一个好习惯。
答案 0 :(得分:4)
我建议你看一下Codahale的Metrics软件包。该软件包收集各种指标(包括时间),然后通过JMX或其他机制报告。
答案 1 :(得分:2)
为什么不使用分析器,例如YourKit或JVisualVM。 JVisualVM随JDK一起提供。如果您确实想自己这样做,请使用java.lang.instrument
和ASM
编写您自己的代理。使用这种方法将逻辑添加到Java方法的序言和结尾是很简单的。
以下是获取started的链接。
答案 2 :(得分:2)
选项1 ::使用AOP
选项2 ::如果您正在登录正确的位置(之前和之后),并在日志中添加时间戳,则可以使用任何分析工具(logrythm,splunk的开源版本等)。 )只是压缩你的日志并弄清楚时间。但请记住,日志记录通常是一项昂贵的操作(在某种程度上,AOP也是如此)。
无论您采取哪种方法,请务必考虑您为应用程序提供的性能影响,以便衡量性能本身: - )。
答案 3 :(得分:1)