A machine code model for efficient advice dispatch

The primary implementations of AspectJ to date are based on a compile- or load-time weaving process that produces Java byte code. Although this implementation strategy has been crucial to the adoption of AspectJ, it faces inherent performance constraints that stem from a mismatch between Java byte code and AspectJ semantics. We discuss these mismatches and show their performance impact on advice dispatch, and we present a machine code model that can be targeted by virtual machine JIT compilers to alleviate this inefficiency. We also present an implementation based on the Jikes RVM which targets this machine code model. Performance evaluation with a set of micro benchmarks shows that our machine code model provides improved performance over translation of advice dispatch to Java byte code.

[1]  Ondrej Lhoták,et al.  Optimising aspectJ , 2005, PLDI '05.

[2]  Michael Haupt,et al.  Virtual machine support for dynamic join points , 2004, AOSD '04.

[3]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[4]  Mira Mezini,et al.  Conquering aspects with Caesar , 2003, AOSD '03.

[5]  Bowen Alpern,et al.  Implementing jalapeño in Java , 1999, OOPSLA '99.

[6]  Michael Haupt,et al.  Virtual Machine Support for Aspects with Advice Instance Tables , 2005, Obj. Logiciel Base données Réseaux.

[7]  Gregor Kiczales,et al.  Aspect-oriented programming , 2001, ESEC/FSE-9.

[8]  L. Peter Deutsch,et al.  Efficient implementation of the smalltalk-80 system , 1984, POPL.

[9]  William G. Griswold,et al.  An Overview of AspectJ , 2001, ECOOP.

[10]  Ondrej Lhoták,et al.  abc: an extensible AspectJ compiler , 2005, AOSD '05.

[11]  Jim Hugunin,et al.  Advice weaving in AspectJ , 2004, AOSD '04.

[12]  Matthew Arnold,et al.  Adaptive optimization in the Jalapeño JVM , 2000, OOPSLA '00.

[13]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[14]  Michael Eichberg,et al.  An execution layer for aspect-oriented programming languages , 2005, VEE '05.

[15]  Michael Haupt,et al.  Efficient control flow quantification , 2006, OOPSLA '06.

[16]  Martin D. Westhead,et al.  A benchmark suite for high performance Java , 2000, Concurr. Pract. Exp..

[17]  Adam Welc,et al.  Improving virtual machine performance using a cross-run profile repository , 2005, OOPSLA '05.

[18]  Perry Cheng,et al.  Oil and water? High performance garbage collection in Java with MMTk , 2004, Proceedings. 26th International Conference on Software Engineering.

[19]  David Robson,et al.  Smalltalk-80: The Language and Its Implementation , 1983 .

[20]  J BartonJohn,et al.  Implementing jalapeo in Java , 1999 .

[21]  Urs Hölzle,et al.  A third-generation SELF implementation: reconciling responsiveness with performance , 1994, OOPSLA '94.

[22]  Lorna Smith,et al.  A benchmark suite for high performance Java , 2000 .

[23]  Gustavo Alonso,et al.  Just-in-time aspects: efficient dynamic weaving for Java , 2003, AOSD '03.