用于性能跟踪的Java自定义注释

时间:2013-04-21 20:51:20

标签: java performance annotations

我想测量项目中各种功能的性能。这将在多个线程上运行,所以现在我有类似的东西

long start = System.currentTimeMillis();
first();
StatsTracker.putTime("first", System.currentTimeMillis() - start);
...
start = System.currentTimeMillis();
second();
StatsTracker.putTime("second", System.currentTimeMillis() - start);

其中StatsTracker是一个静态类,只是跟踪表演地图。

我是编写自定义注释的新手,我在网上看到的一些教程让它有点混乱。我最终想要的是这样的

@StartTime("first")
first();
@EndTime("first")
...
@StartTime("second")
second();
@EndTime("second")

然后,对于开始/结束时间注释,我希望两个注释记录当前系统时间,然后将该运行时间放入映射(以记录平均性能)。

编辑:在定义函数之前有这样的东西可能更自然:

@TrackTime("first")
public void first() { ... }

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

注释只是元数据。他们什么都不做。

框架可以使用反射来获取方法和类的注释,以便对它们执行某些操作。这意味着,要执行您想要执行的操作,您需要使用AOP查找方法上的注释并测量它们花费的时间。

存在这样的框架(例如Jamon与Spring bean相结合)。但是自己编写一个会花费比现在正在做的更多的时间,并且可能会强制您改变应用程序的架构方式,以便使用某种形式的依赖注入。或者你必须使用AspectJ来检测字节码。

所以我的建议是:不要改变任何东西,或使用依赖注入框架并使用现有产品(例如jamon),或编写自定义AOP拦截器来测量组件方法所花费的时间