Christian Wimmer

Optimization of Dynamic Languages Using Hierarchical Layering of Virtual Machines

Alexander Yermolovich, Christian Wimmer, Michael Franz: Optimization of Dynamic Languages Using Hierarchical Layering of Virtual Machines. In Proceedings of the Dynamic Languages Symposium, pages 79–88. ACM Press, 2009. doi:10.1145/1640134.1640147

Download as PDF
© ACM, 2009.


Creating an interpreter is a simple and fast way to implement a dynamic programming language. With this ease also come major drawbacks. Interpreters are significantly slower than compiled machine code because they have a high dispatch overhead and cannot perform optimizations. To overcome these limitations, interpreters are commonly combined with just-in-time compilers to improve the overall performance. However, this means that a just-in-time compiler has to be implemented for each language.

We explore the approach of taking an interpreter of a dynamic language and running it on top of an optimizing trace-based virtual machine, i.e., we run a guest VM on top of a host VM. The host VM uses trace recording to observe the guest VM executing the application program. Each recorded trace represents a sequence of guest VM bytecodes corresponding to a given execution path through the application program. The host VM optimizes and compiles these traces to machine code, thus eliminating the need for a custom just-in-time compiler for the guest VM. The guest VM only needs to provide basic information about its interpreter loop to the host VM.