Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] AspectJ Performance


Bo,

To get the best performance there is a pattern you should follow which is documented in Chapter 11 of "eclipse AspectJ". Firstly you should use an if() pointcut (which you have) which returns false when logging is disabled. Secondly if you are using thisJoinPoint to capture method parameters it should only be used in before advice when logging method entry; use thisJoinPointStatic part in after advice for method exit. Thirdly use -XlazyTjp which is now the default in AspectJ 1.5.3.

Micro-benchmarks have their place but are not the best way to assess the overall impact on the application. I would suggest using a benchmark that exercises your application as a whole. Also you should compare apples with apples i.e. an aspect with its hand-coded equivalent. If you don't want to do that once you have an efficient aspect pick an overhead you are comfortable with instead e.g. 5%. Then adjust the scope of you aspect i.e. which methods/classes to achieve it.

Matthew Webster
AOSD Project
Java Technology Centre, MP146
IBM Hursley Park, Winchester,  SO21 2JN, England
Telephone: +44 196 2816139 (external) 246139 (internal)
Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
http://w3.hursley.ibm.com/~websterm/



Bo Li <b.li@xxxxxxx>
Sent by: aspectj-users-bounces@xxxxxxxxxxx

14/01/2007 22:53

Please respond to
aspectj-users@xxxxxxxxxxx

To
aspectj-users@xxxxxxxxxxx
cc
Subject
[aspectj-users] AspectJ Performance





Hello All

We are currently evaluating the possibility of using AspectJ for the debug
logging component of our project. One of the major requirements is that
there should be minimal performance impact when the debug logging component
is turned off. I was doing some performance testing with AspectJ and it
seems like there is a 35% - 50% decrease in performance after the aspects
are woven into our classes.

My benchmark pretty much just measures the number of calls to a method that
increments a integer 1000 times. Without the aspects, we would see around
470 calls/ms. With an advice that has an entry and exit pointcut just for
that method woven in, we see around 300 calls/ms. Each pointcut only
contains an if statement that always evaluate to false to simulate logging
turned off.

Digging in to the woven code, I noticed ajc inserted the following code
right after the method signature:

org.aspectj.lang.JoinPoint joinpoint = Factory.makeJP(ajc$tjp_0, this,
this);

This seems to be an expensive operation, especially for every method entry.
Are there any ways to speed up this case so that AspectJ adds as little
overhead as possible when the pointcut doesn't do anything? It would be
ideal if there was a way to control executing expensive operations like the
one above so that they are done only when necessary.

Thank you for your help!

Bo Li - b.li@xxxxxxx
Software Engineer - Directory Server
Sun Microsystems Inc.


_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Back to the top