The execution model for mobile dynamically-linked object--oriented
programs has evolved from fast interpretation to a mix of interpreted and
dynamically compiled execution. The primary motivation for dynamic compilation
is that compiled code executes significantly faster than interpreted code.
However, since dynamic compilation is performed while the application is
running, the biggest challenge in using dynamic compilation is to reduce its
overhead so as not to mitigate the runtime improvement that it delivers.
Techniques for reducing dynamic compilation overhead can be classified as (1)
decreasing the amount of compilation performed, or (2) overlapping compilation
with useful work. In this paper, we first evaluate the effectiveness of Lazy
Compilation as a technique for decreasing the amount of compilation performed.
In lazy compilation, individual methods are compiled on demand (when called),
thus avoiding the load-time delay of compiling all methods when a new
class/module is loaded. Our experimental results (obtained by executing the
specJVM Java programs on the Jalapeno JVM) show that lazy compilation results
in compilation of 57% to 63% fewer methods, and a reduction in compilation time
of approximately 30%, when compared to load-time compilation. Next, we present
Profile-driven Background Compilation as a new technique for overlapping
compilation with execution. The motivation for background compilation is to
use idle cycles in multiprocessor systems to overlap compilation with
application execution. Profile information is used to prioritize methods as
candidates for background compilation. Our results show that background
compilation can deliver significant reductions (26% to 79%) in total time i.e.,
compilation plus execution time, compared to serial (non-background)
Pre-2018 CSE ID: CS2000-0648