Hi Nuno,
Make sure you are on a recent AspectJ. You could also try turning on type demotion - it is a -Xset option, don't quite recall how to turn those on via maven (-Xset:typeDemotion=true). Type demotion tries to run with a smaller footprint by throwing things away more eagerly. If it needs them again later it pulls them back in. I thought it was on by default but very quickly browsing the code it seems to be only automatically on for load time weaving or when using it in an IDE environment.
Normally I'd say the use of wildcards is more likely to impact compilation time than memory usage, however depending on how your pointcut is written AspectJ may need to chase down supertypes and interfaces to determine a match. The more of those that need to get chased down the more memory is likely to be used. In these situations using wildcards would save a little memory because we can tell immediately that * matches something without needing to look at the supertypes of the potential match. Are you using declaring type patterns in your pointcut (execution(* Foo.*(..))) or not (execution(* *(..)) - the former is what may need more chasing/loading of types (having to dig into whether a target is a subtype of Foo). Are you using execution() or using call(), the former is likely to be a bit cheaper. If you can add a scope to your pointcut, do so (i.e. a within clause).
cheers,
Andy