在java中,如何快速注释几行代码?

时间:2012-10-28 07:28:59

标签: java debugging annotations

我想测试某个代码块的运行时间如下:

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);

6 个答案:

答案 0 :(得分:4)

只需使用分析器。它将以最小的占用空间自动检测代码,显示各种统计数据和热点。查看分析器built into JVisualVMJProfilerYourKit

当你不需要它时,你不需要支付任何费用。

答案 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)

将性能测量代码从主代码中分离出来。执行以下操作之一:

  • 作为chm052在他的anwswer中描述,带有一些旗帜和守卫的命令;
  • 通过使用具有这些保护命令的日志框架,例如SLF4J;
  • 使用(micro-)benchmarking tool,它可以帮助您进行良好的时间测量,统计和保护命令(例如,通过AspectOrientedProgramming)。你绝对应该使用这样的工具来获得合理的测量结果(参见例如https://stackoverflow.com/a/7120803/750378)。

答案 4 :(得分:1)

chm052提出的方法肯定会有效,但它会将时间测量时间逻辑与您的业务方法结合起来,这是不可取的。写完所有方法后执行“dosomething()” - 在这些方法之前和之后你想要测量时间。明天你会想要记录语句链接“输入方法/离开方法doSomething”,有一段时间你可能想要检查是否可以运行这些代码的权限。

我希望你明白我的观点,虽然这种方法对于简单的项目来说是好的,但它会污染你的代码并引起无关紧要的关注

有几种技巧。

  1. AOP,Joachim Isaksson已经提出过这个建议。 AOP在这个领域真的很棒。创建一个建议,您将使用时间测量逻辑,并准备好了。

  2. 如果您希望/需要坚持使用OOP技术,我建议您创建一个ProxyDecorator

  3. 从技术上讲,它非常接近彼此,只有你如何牢记你关心的意图。

    希望这有帮助

答案 5 :(得分:-1)

我不太清楚你的意思。如果你只想评论代码,那么捷径就是ctrl + / in eclipse。如果你试图在你的项目中使用这种代码,你可以使用log4j来做这种事情。