Reconciling Responsiveness with Performance
in Pure Object-Oriented Languages
Urs Hölzle
and
David Ungar
Abstract:
Dynamically-dispatched calls often limit the performance of
object-oriented programs since object-oriented programming encourages
factoring code into small, reusable units, thereby increasing the
frequency of these expensive operations. Frequent calls not only slow
down execution with the dispatch overhead per se, but more importantly
they hinder optimization by limiting the range and effectiveness of
standard global optimizations. In particular, dynamically- dispatched
calls prevent standard interprocedural optimizations that depend on
the availability of a static call graph.
The SELF implementation described here offers two novel approaches to
optimization. Type feedback speculatively inlines
dynamically-dispatched calls based on profile information that
predicts likely receiver classes. Adaptive optimization reconciles
optimizing compilation with interactive performance by incrementally
optimizing only the frequently-executed parts of a program. When
combined, these two techniques result in a system that can execute
programs significantly faster than previous systems while retaining
much of the interactiveness of an interpreted system.
ACM Trans. Programming Languages and Systems 18(4):355-400, 1996.
An earlier version of this paper is
here
(PDF).