HotWave: creating adaptive tools with dynamic aspect-oriented programming in Java

Developing tools for profiling, debugging, testing, and reverse engineering is error-prone, time-consuming, and therefore costly when using low-level techniques, such as bytecode instrumentation. As a solution to these problems, we promote tool development in Java using high-level aspect-oriented programming (AOP). We demonstrate that the use of aspects yields compact tools that are easy to develop and extend. As enabling technology, we rely on HotWave, a new tool for dynamic and comprehensive aspect weaving. HotWave reconciles compatibility with existing virtual machine and AOP technologies. It provides support for runtime adaptation of aspects and reweaving of previously loaded code, as well as the ability to weave aspects into all methods executing in a Java Virtual Machine, including methods in the standard Java class library. HotWave also features a new mechanism for efficiently passing data between advices that are woven into the same method. We demonstrate the benefits of HotWave's distinguishing features with two case studies in the area of profiling.

[1]  Walter Binder,et al.  Aspect weaving in standard Java class libraries , 2008, PPPJ '08.

[2]  Walter Binder,et al.  Flexible calling context reification for aspect-oriented programming , 2009, AOSD '09.

[3]  Walter Binder,et al.  Visualizing Calling Context profiles with Ring Charts , 2009, 2009 5th IEEE International Workshop on Visualizing Software for Understanding and Analysis.

[4]  Martin Schoeberl,et al.  Cache-aware cross-profiling for java processors , 2008, CASES '08.

[5]  Wim Vanderperren,et al.  Adaptive programming in JAsCo , 2005, AOSD '05.

[6]  Walter Binder,et al.  Advanced Java bytecode instrumentation , 2007, PPPJ.

[7]  Walter Binder,et al.  CCCP: complete calling context profiling in virtual execution environments , 2009, PEPM '09.

[8]  Ondrej Lhoták,et al.  Adding trace matching with free variables to AspectJ , 2005, OOPSLA '05.

[9]  James R. Larus,et al.  Exploiting hardware performance counters with flow and context sensitive profiling , 1997, PLDI '97.

[10]  Walter Binder,et al.  Platform‐independent profiling in a virtual execution environment , 2009, Softw. Pract. Exp..

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

[12]  Oscar Nierstrasz,et al.  Augmenting static source views in IDEs with dynamic metrics , 2009, 2009 IEEE International Conference on Software Maintenance.

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

[14]  Gustavo Alonso,et al.  Controlled, systematic, and efficient code replacement for running java programs , 2008, Eurosys '08.

[15]  Robert J. Walker,et al.  Implementing protocols via declarative event patterns , 2004, SIGSOFT '04/FSE-12.

[16]  Shigeru Chiba,et al.  A Selective, Just-in-Time Aspect Weaver , 2003, GPCE.

[17]  Cristina V. Lopes,et al.  Aspect-oriented programming , 1999, ECOOP Workshops.

[18]  Michael Leuschel,et al.  Partial Evaluation of Pointcuts , 2007, PADL.

[19]  Oscar Nierstrasz,et al.  Senseo: Enriching Eclipse's static source views with dynamic metrics , 2009, 2009 IEEE International Conference on Software Maintenance.

[20]  Walter Binder,et al.  Flexible and efficient measurement of dynamic bytecode metrics , 2006, GPCE '06.

[21]  Laurie J. Hendren,et al.  *J: a tool for dynamic analysis of Java programs , 2003, OOPSLA '03.

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

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

[24]  Walter Binder,et al.  Platform-independent profiling in a virtual execution environment , 2009 .

[25]  Yannis Smaragdakis,et al.  J-Orchestra: Automatic Java Application Partitioning , 2002, ECOOP.

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

[27]  Michael D. Ernst,et al.  ReCrash: Making Software Failures Reproducible by Preserving Object States , 2008, ECOOP.

[28]  Matthias Hauswirth,et al.  Measuring the performance of interactive applications with listener latency profiling , 2008, PPPJ '08.

[29]  Hidehiko Masuhara,et al.  SCoPE: an AspectJ compiler for supporting user-defined analysis-based pointcuts , 2007, AOSD.

[30]  Éric Tanter,et al.  Altering Java Semantics via Bytecode Manipulation , 2002, GPCE.