Table of Contents

JAsCo Run-time Weaver

JAsCo is one of the first approaches to implement a real run-time weaver that weaves and unweaves the aspects physically into the target application while it is running. The principle of the JAsCo runtime weaver is identical to AspectJ’s weaver, except that the weaving happens at run-time. Unlike a lot of other approaches, unweaving and reweaving during runtime are possible, even at joinpoints that are not woven before! The performance of the JAsCo run-time weaver is able to compete with AspectJ and AspectWerkz, and in some cases even improve, while allowing the additional flexibility of genuine run-time weaving.

The main advantage of this run-time weaver with respect to the previous JAsCo implementation (HotSwap+Jutta) is performance. The functionality remains identical, but because the aspects are woven into the target application, the aspects’ logic executes faster and additional optimalizations are possible.

System Requirements

How-to

Make sure to run JAsCo using the HotSwap2 startup command and also enable the run-time weaver using the following command: -Djasco.hotswap.inlinecompiler=true.

Example usage:

 java -javaagent:/home/test/jasco/jasco.jar -Djasco.hotswap.inlinecompiler=true MainPackage.MainClass

More information on running JAsCo HotSwap2 can be found here.

It is also possible to specify a heuristics function to decide on a per-joinpoint basis whether traps have to be inserted or whether the aspects are invasively weaved. Traps are inserted faster and do not have to be altered when aspects are added or removed to the trap’s joinpoint. The run-time weaver takes more time for the weaving itself and for every additional aspect to the joinpoint, the joinpoint has to be reweaved, which takes time. At the other hand, the run-time performance of the run-time weaver is a lot better. For more information on the different JAsCo weavers, see the paper below, or one of the articles available here.

In order allow users to tweak their applications for fastest performance, the heuristitcs function allows to decide for which joinpoints run-time weaving is used and for which traps are used. To do this, implement a class that implements the following interface: jasco.runtime.inline.InlineHeuristics . This interface contains one method:

public boolean inlineCompile(MethodJoinpoint method, Vector hooks);

When this method returns true, the run-time weaver is employed. Otherwise, a trap is inserted. The first argument (MethodJoinpoint) contains reflective data about the current method joinpoint, the second argument contains the list of hooks that are applicable at this joinpoint. Both information can thus be used to assess whether the inline compiler has to be triggered. Finally, inform the JAsCo run-time infrastructure about this heuristics by specifying the following command: -Djasco.hotswap.inlinecompiler.heuristics=FullClassNameOfHeuristics

Limitations of the current implementation

Benchmark Evalution

We performed several bencmarks using the AWBench benchmarking project made by the AspectWerkz team.

The results are described in the following paper: De Fraine, B., Vanderperren, W., Suvee, D. and Brichau, J. Jumping Aspects Revisited. In Proceedings of DAW 2005, Chicago, USA, March 2005. [download draft]

For more info on AWBench and downloads, see the official AWBench website. JAsCo is integrated in the version downloadable from their CVS.

The figure below shows AWBench benchmark results run on a PENTIUM4, 2GHZ, 256 RAM with Ubuntu Linux 4.10, Java 1.5.0 update 1 and JAsCo 0.8.5M1. Notice the logarithmic scale of the timings in order to keep every result readable.

JAsCo including the novel run-time weaver is able to compete with both AspectJ and AspectWerkz and performs significantly better than the other approaches. For instance, JAsCo executes all advices at least hundred times faster than Spring/AOP. Also notice the improvement over running JAsCo without the run-time weaver (JAsCo noRTW).

More benchmarks including weave-time, aspect factories, stateful aspects will be published soon!