Unpicking the knot: teasing apart VM/application interdependencies

Flexible and efficient runtime design requires an understanding of the dependencies among the components internal to the runtime and those between the application and the runtime. These dependencies are frequently unclear. This problem exists in all runtime design, and is most vivid in a metacircular runtime --- one that is implemented in terms of itself. Metacircularity blurs boundaries between application and runtime implementation, making it harder to understand and make guarantees about overall system behavior, affecting isolation, security, and resource management, as well as reducing opportunities for optimization. Our goal is to shed new light on VM interdependencies, helping all VM designers understand these dependencies and thereby engineer better runtimes. We explore these issues in the context of a high-performance Java-in-Java virtual machine. Our approach is to identify and instrument transition points into and within the runtime, which allows us to establish a dynamic execution context. Our contributions are: 1) implementing and measuring a system that dynamically maintains execution context with very low overhead, 2) demonstrating that such a framework can be used to improve the software engineering of an existing runtime, and 3) analyzing the behavior and runtime characteristics of our runtime across a wide range of benchmarks. Our solution provides clarity about execution state and allowable transitions, making it easier to develop, debug, and understand managed runtimes.

[1]  Martín Abadi,et al.  An Overview of the Singularity Project , 2005 .

[2]  Kiyokuni Kawachiya,et al.  A study of Java's non-Java memory , 2010, OOPSLA.

[3]  David M. Ungar,et al.  Constructing a metacircular Virtual machine in an exploratory programming environment , 2005, OOPSLA '05.

[4]  Wilson C. Hsieh,et al.  Processes in KaffeOS: isolation, resource management, and sharing in java , 2000, OSDI.

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

[6]  Jan Vitek,et al.  Engineering a common intermediate representation for the Ovm framework , 2005, Sci. Comput. Program..

[7]  Kathryn S. McKinley,et al.  Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance , 2008, PLDI '08.

[8]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.

[9]  Bowen Alpern,et al.  Experiences Porting the Jikes RVM to Linux/IA32 , 2002, Java Virtual Machine Research and Technology Symposium.

[10]  David R. Cheriton,et al.  A caching model of operating system kernel functionality , 1994, OSDI '94.

[11]  John Daniels,et al.  Java™ on the bare metal of wireless sensor devices: the squawk Java virtual machine , 2006, VEE '06.

[12]  Stephen M. Blackburn,et al.  The Moxie JVM Experience , 2007 .

[13]  Perry Cheng,et al.  Demystifying magic: high-level low-level programming , 2009, VEE '09.

[14]  Samuele Pedroni,et al.  PyPy's approach to virtual machine construction , 2006, OOPSLA '06.

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