Thanks for the advice, It surely help. I would go with the 1st option, there is same functionality to reduce memory usage in weaver options for LTW. I am hesitant to take the 2nd option mainly because we have to change our build process and there are some learning curves to use compile time weaving.
Regards, - yohan chandra - On Thu, Oct 21, 2010 at 10:41 AM, Andrew Eisenberg <and...@eisenberg.as>wrote: > I would not actually recommend the second approach and I'm not even > sure it would work. What I was suggesting was to separate each aspect > and each service class into its own project/jar and so each aspect > would only be woven with the appropriate service class. However, this > would not work with LTW since all classes would be visible to all > aspects. > > The memory consumption pattern you are seeing does sound too high. > There are two experimental options you could try that may address > memory consumption. You can read more here: > http://andrewclement.blogspot.com/2010/07/ajdt-memory-usage-reduction.html > (although I am not sure if this is available for LTW, maybe only > compile time weaving). > > Another thing I'd recommend is that if at all possible, switch to > compile time weaving. This will save some significant memory at run > time. > > Let me know if this helps. If not, perhaps we can have a look at your > heap to see if there is anything obvious that we can do. > > On Thu, Oct 21, 2010 at 8:00 AM, yohan chandra <yohan.chan...@gmail.com> > wrote: > > Hi Andrew, > > > > Thanks for the answer. I actually have applied the 1st approach, the > > pointcuts and advices defined in aspectA are applied to serviceA only and > > it's working well. However the issue is with memory I believe even though > > only specific pointcut is applied, the class has been woven by other > > unrelated aspects and this consumes memory. I monitored my app and I > noticed > > a large increase of memory usage since AspectJ got implemented. I took > the > > heap dump and significant portion of it are AspectJ related instances. > > > > My app has lots of aspects and lots of "include within" classes. As I > watch > > from the log, each of this "include within" class is woven with number of > > aspects that I have, even though only specific aspect will be applied > later > > by the pointcut. Suppose If i have 20 aspects and 30 "include within" > > classes the total number will be 600. I am trying to reduce the memory > usage > > of my AspectJ implementation as much as i can so it can go into > production > > but currently I am blocked. > > > > Could you elaborate on the 2nd approach? I am trying to weave only > specific > > aspect to its specific class(es). > > > > Regards, > > - Yohan chandra - > > > > On Wed, Oct 20, 2010 at 5:36 PM, Andrew Eisenberg <and...@eisenberg.as> > > wrote: > >> > >> > 1. Will servicesA be woven with all the three aspects (aspectA,B,C)? > >> Correct. > >> > >> > 2. If Yes, is there any way to configure specific aspect to weave only > >> > specific class(es), example: AspectA weaves only servicesA? > >> > >> Not directly, but there are two suggestions: > >> > >> 1. Within each specific aspect, you can add a within() pointcut to > >> each of your advice declarations and this will ensure that AspectA is > >> only applied to ServiceA. Eg, something like this: > >> > >> pointcut canApplyTo() : within(ServiceA); > >> > >> after() : doingSomethingAwesome() && canApplyTo() { > >> ... > >> } > >> > >> 2. Separate each of your service and aspects into separate modules to > >> pair serviceA and aspectA, etc. > >> > >> I'd strongly recommend #1. > >> _______________________________________________ > >> aspectj-users mailing list > >> aspectj-users@eclipse.org > >> https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > >
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users