Offered: 2014Sp, 2013Sp, 2012Sp, 2010Sp
In this course, we focus on an important category of compilation called dynamic compilation that occurs as a program is running. With modern software heavily utilizing shared libraries, dynamic class loading and runtime binding, the scope of static analysis and transformation has grown restrictive. Dynamic compilation overcomes this challenge by postponing code generation and optimization until the initial stages of execution are complete. Dynamic compilers enable effective feedback-directed optimization, architecture-specific code transformations, program introspection, etc. However, since a dynamic compiler uses cycles and other resources such as memory at run time, the overhead of runtime activity must be wisely managed. This course covers the basics of dynamic compilation and explores a variety of features and trade-offs in runtime optimization.