From 40ca8e83c517f1b7277c4f360bbeb50d66cc9da3 Mon Sep 17 00:00:00 2001 From: aclement Date: Fri, 1 Jan 2010 00:38:52 +0000 Subject: [PATCH] 167 readme --- docs/dist/doc/167Memory.png | Bin 0 -> 28477 bytes docs/dist/doc/README-167.html | 165 ++++++++++++++++++++++++++++++++++ docs/dist/doc/index.html | 1 + 3 files changed, 166 insertions(+) create mode 100644 docs/dist/doc/167Memory.png create mode 100644 docs/dist/doc/README-167.html diff --git a/docs/dist/doc/167Memory.png b/docs/dist/doc/167Memory.png new file mode 100644 index 0000000000000000000000000000000000000000..4e604e59dcc85373410dd550f99b675dcc798a28 GIT binary patch literal 28477 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 KD^|)|h5ZLWOO?<7 literal 0 HcmV?d00001 diff --git a/docs/dist/doc/README-167.html b/docs/dist/doc/README-167.html new file mode 100644 index 000000000..11c0737d1 --- /dev/null +++ b/docs/dist/doc/README-167.html @@ -0,0 +1,165 @@ + + +AspectJ 1.6.7 Readme + + + + +
+© Copyright 2009 Contributors. +All rights reserved. +
+ +

AspectJ 1.6.7 Readme

+ +

AspectJ 1.6.7 includes some radical internal changes. These improvements enable faster compilation, faster binary weaving, +faster load time weaving and in some situations faster generated code.

+ +

Pointcut timers

+

Until 1.6.7 there has not really been a way to determine if it is just one of your pointcuts that is hurting your weaving +performance. In 1.6.7 it is possible to turn on timers for pointcuts. These timers show +the time spent in the weaver matching the pointcut components against join points. The details on this feature are +here: Profiling pointcut +matching. Basically by turning on the options '-timers -verbose' on the command line (or via Ant), output will be produced +that looks a little like this: + +


+Pointcut matching cost (total=6532ms for 675000 joinpoint match calls):
+Time:482ms (jps:#168585) matching against 
+    (staticinitialization(*y*.()) && persingleton(SimpleAspect))
+Time:3970ms (jps:#168585) matching against 
+    (execution(* *t*.*(*)) && persingleton(SimpleAspect))
+Time:538ms (jps:#168584) matching against 
+    (execution(* *f*(..)) && persingleton(SimpleAspect))
+Time:1536ms (jps:#168584) matching against 
+    (execution(* java.lang.CharSequence+.*e*(..)) && persingleton(SimpleAspect))
+Time:4ms (jps:#662) matching against 
+    (within(*p*) && persingleton(SimpleAspect))
+
+ +

It shows the component, the number of joinpoints (jps) the weaver attempted to match it against and how many milliseconds were +spent performing those matches. The options can also be turned on +through AJDT. +Armed with this information you can optimize your pointcuts or post on the mailing list asking for help. The timers can even be +turned on for load time weaving.

+ + +

Faster matching

+ +

The changes to enable pointcut profiling enabled some targeted work to be done on the matching algorithms. These +have remained unchanged for a few years, but in 1.6.7 have received a bit of an overhaul. 'Fast match' has +been implemented for the execution() pointcut, drastically reducing weave times for heavy users of execution - more details +here. The pointcut cost +calculator (which is used to sort pointcuts to optimize matching speed) has been reviewed and after determining that +this() ought to be considered cheaper than call() - any user combining those two pointcut designators should see an improvement +(one users build time reduced from 38minutes to 6minutes with that change!).

+ +

As well as faster matching there is also less exploration to determine a match. Visitors that walk hierarchies and discover +methods now terminate as early as possible once they can determine something is a match or is definetly not a match. This reduces +memory usage, speeds up weaving and reduces the occurrences of those annoying 'cantFindType' messages.

+ +

aop.xml processing

+ +

The processing of include/exclude entries in aop.xml has been rewritten. It now optimizes for many more common patterns. If +a pattern is optimized then there is no need to ask the weaver to do an expensive include/exclude match. More details +here. + +

Less need to tweak options for load time weaving

+ +

A number of options were previously configurable for load time weaving that were considered experimental. These options +have now been tested enough in the field that they are considered fully reliable and are on by default in 1.6.7. If you have +been using either of these: +

    +
  • typeDemotion +
  • runMinimalMemory +
+

then please delete them from your weaver options section, the weaver will now do the right thing out of the box.

+ +

Benchmarking memory and performance

+ +

All those changes above, and some additional tweaks, mean we are now using less memory than ever before and getting +things done more quickly.

+

This post discusses +the details. From that article, the graph below shows the speed and memory consumption of the +various AspectJ 1.6 releases when load time weaving a small application loading in Tomcat. For each of 10 iterations (x axis), +the top comparison is startup time in +milliseconds, the lower comparison is memory used in bytes.

+

+ +

Annotation binding

+ +

All those changes affect compilation/weaving but what about the code that actually runs? One user, Oliver Hoff, raised +a query on the performance of annotation binding. His case uncovered an old TODO left in the code a few years ago:

+
// OPTIMIZE cache result of getDeclaredMethod and getAnnotation?
+ +

Annotation binding has become a very common use case since that was written and 1.6.7 was the time TODO it.

+ +

The result is an optimization for the general case of binding an annotation, but also support for a new bit of syntax +that aids binding of a string annotation member value - using this latter syntax generates extremely fast code.

+ +

Here are some numbers for a simple benchmark retrieving the annotation value at an execution join point +in different ways. The three scenarios look like this (where the annotation type is 'Marker' and it has a String value field +called 'message'):

+ +
+  // CaseOne: annotation value fetching is done in the advice:
+  pointcut adviceRetrievesAnnotation(): execution(@Marker * runOne(..));
+  before(): adviceRetrievesAnnotation() {
+    Marker marker = (Marker) ((MethodSignature)
+        thisJoinPointStaticPart.getSignature()).getMethod().getAnnotation(Marker.class);
+    String s = marker.message();
+  }
+
+  // CaseTwo: annotation binding is done in the pointcut, advice retrieves message
+  pointcut pointcutBindsAnnotation(Marker l): execution(@Marker * runTwo(..)) && @annotation(l);
+  before(Marker l): pointcutBindsAnnotation(l) {
+    String s = l.message();
+  }
+
+  // CaseThree: annotation binding directly targets the message value in the annotation
+  pointcut pointcutBindsAnnotationValue(String msg):
+    execution(@Marker * runThree(..)) && @annotation(Marker(msg));
+  before(String s): pointcutBindsAnnotationValue(s) {
+    // already got the string
+  }
+
+ +

Before 1.6.7, case 2 was slower than case 1 and case 3 wasn't supported syntax. The two bugs with more info are +Bug 296484 and +Bug 296501.

+ +

Now this is a micro benchmark, slightly unrepresentative of the real world because the advice isn't doing anything +else, but it does really stress the AspectJ binding code. For the benchmark numbers the join points advised by those advice +were invoked 1,000,000 times. AspectJ 1.6.7:

+ +
+Manually fetching annotation with getAnnotation(): 645ms
+Binding annotation with @annotation(Marker): 445ms  (was >20 *seconds* for 1.6.6, due to an extra reflection call)
+Binding annotation value with @annotation(Marker(message)): 3ms
+
+ +

The new syntax is definetly the best way to bind an annotation string value.

+ +
+ + +

Bugs fixed

+

The complete list of issues resolved for AspectJ 1.6.7 can be found with +this bugzilla query: +

+
+ +

+ + + diff --git a/docs/dist/doc/index.html b/docs/dist/doc/index.html index d8370b67c..804125132 100644 --- a/docs/dist/doc/index.html +++ b/docs/dist/doc/index.html @@ -138,6 +138,7 @@ README's Changes and porting guide for AspectJ + 1.6.7, 1.6.6, 1.6.5, 1.6.4, -- 2.39.5