我想测试某个代码块的运行时间如下:
start = System.currentTimeMillis();
{
...
this.dosomething();
}
end = System.currentTimeMillis();
System.out.println(end - start);
当我优化代码块时,如何快速注释那些快速计算时间的代码?
//start = System.currentTimeMillis();
{
...
this.dosomething();
}
//end = System.currentTimeMillis();
//System.out.println(end - start);
答案 0 :(得分:4)
只需使用分析器。它将以最小的占用空间自动检测代码,显示各种统计数据和热点。查看分析器built into JVisualVM,JProfiler或YourKit。
当你不需要它时,你不需要支付任何费用。
答案 1 :(得分:2)
您可以使用annotation processing
创建compile time
annotations
并根据该代码生成源代码。
本文讨论如何使用注释生成代码Properties via Annotation Processing
。
您可以定义自定义注释,例如@Start
,@End
,@Calculate
,并使用它们,如下所示。如果你不生成源代码,他们将被删除。
@Start
{
...
this.dosomething();
}
@End
@Caclulate
注意:它无法修改被检查的代码,因此您需要创建子类。
答案 2 :(得分:1)
如果你只是想要一些简单的东西,那么当你想要打印调试信息时,你总是可以得到一个debug
(布尔)变量,例如:
if (debug) start = System.currentTimeMillis();
{
...
this.dosomething();
}
if (debug) {
end = System.currentTimeMillis();
System.out.println(end - start);
}
当我这样做时,我经常使用命令行参数设置debug
,因此不需要更改代码来切换调试模式。
编辑:如果你想在程序的其他地方重复这个结构,我肯定会选择其他答案中提到的AOP。
答案 3 :(得分:1)
将性能测量代码从主代码中分离出来。执行以下操作之一:
答案 4 :(得分:1)
chm052提出的方法肯定会有效,但它会将时间测量时间逻辑与您的业务方法结合起来,这是不可取的。写完所有方法后执行“dosomething()” - 在这些方法之前和之后你想要测量时间。明天你会想要记录语句链接“输入方法/离开方法doSomething”,有一段时间你可能想要检查是否可以运行这些代码的权限。
我希望你明白我的观点,虽然这种方法对于简单的项目来说是好的,但它会污染你的代码并引起无关紧要的关注
有几种技巧。
答案 5 :(得分:-1)
我不太清楚你的意思。如果你只想评论代码,那么捷径就是ctrl + / in eclipse。如果你试图在你的项目中使用这种代码,你可以使用log4j来做这种事情。