[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [aspectj-dev] Caching weaved classes | 
Hi Andy,
it's fun how you understand what I want to do even if I haven't written 
it :) Yes, you got the point, and gave me the right informations (as 
always). Thanks for your long answer.
I'm pretty sure time is spent inside LTW because if I weave everything 
at build time and fire up the same application it takes around 5 seconds 
to start. I profiled it to have confirmation.
Anyway I'm working on a caching classloader, that will cache everything 
on disk and purge only classes that are changed, as long as an aspect 
has not been changed, in which case it will clean the cache completely. 
Obviously, "changed" means the class has changed, including white space 
change (inside a string :) ) unfortunately. But still, for the 90% of 
application restarts that does not involve changing an aspect, that 
should be enough.
Preliminary results are already encouraging, thought still need to know 
if a certain changed class is an aspect or not, checking for 
org.aspectj.weaver.Aspect annotation is enough?
Simone
Andy Clement wrote:
Hi Simone,
> reduce load time, which in fact is a bit long being more than 30 
seconds for each cycle
> even for a basic project
Have you profiled it to confirm it is the load-time weaver that is to 
blame here?  Do you
know precisely where the time is spent? It may be a bug.
> But since recently version 1.6.3 focused
> on separating matching from weaving, and since the matching part is
> obviously the first part that the WeavingAdaptor computes upon 
startup, the
> idea kept on coming up.
Although 1.6.3 introduced a notion of just standalone matching - the 
weaver itself
was not rewritten to exploit the split down at the lowest level since 
there it still
makes sense to have these two activities coupled.  Effectively we just 
provided
another route to the matching logic where you didn't need to provide a 
bytecode
representation, you could provide anything you like (eg. JDT source 
ASTs) as
long as it would sit neatly under the AspectJ type abstraction layer.
The weavingadaptor does do some matching, but only the trivial stuff 
by comparing
types to the include/exclude patterns - it still defers all proper 
pointcut
matching to the weaver and it doesn't know anything about which types were
affected by which other types.  None of that information is preserved 
for ltw.
It isn't quite clear to me what you want to do - am I reading it that 
you want
to probably only reweave things that need reweaving based on aspect 
changes?
This is what the incremental AspectJ compiler does and it isn't 
trivial - there is
a whole bunch of state preserved between compiles about what types 
reference
what types.  Reworking that state so that it can be exploited by 
load-time dynamic
reweaving wouldn't be a simple bit of work - but is that what you are 
talking about
wanting to do?  Even then the AspectJ incremental compiler is far from 
cutting edge
in its analysis - really it only avoids full builds/reweaves for white 
space changes
and non-structural changes, if you change a pointcut it will kick off 
a reweave of
everything as it doesn't incrementally work out that you're only now 
matching
one more join point.
Andy.
2009/1/22 Simone Gianni <simoneg@xxxxxxxxxx <mailto:simoneg@xxxxxxxxxx>>:
> Hi all,
> in the Apache Magma Lab, we're using LTW for our users development
> environment. Lately I rewrote this part to proper pipeline class 
loading,
> AspectJ weaving and OpenJPA enhancing. While rewriting it, I kept on
> thinking on LTW classes caching performed by Equinox Aspects to 
reduce load
> time, which in fact is a bit long being more than 30 seconds for 
each cycle
> even for a basic project. Actually, OSGI has the advantage of 
knowing which
> bundle weaves which other bundles, and simply trigger a reload of those
> bundles if an aspect has changed. But since recently version 1.6.3 
focused
> on separating matching from weaving, and since the matching part is
> obviously the first part that the WeavingAdaptor computes upon 
startup, the
> idea kept on coming up.
>
> Do you have any pointers for me to start? Do you think it's 
possible? Do you
> think it's useful?
>
> Simone
>
> --
> Simone Gianni            CEO Semeru s.r.l.           Apache Committer
> http://www.simonegianni.it/
>
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx <mailto:aspectj-dev@xxxxxxxxxxx>
> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>
------------------------------------------------------------------------
_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev
  
--
Simone Gianni            CEO Semeru s.r.l.           Apache Committer
http://www.simonegianni.it/