The use of dynamically-dispatched procedure calls is a key mechanism f
or writing extensible and flexible code in object-oriented languages.
Unfortunately, dynamic dispatching imposes a runtime performance penal
ty. Some recent implementations of pure object-oriented languages have
utilized profile-guided receiver class prediction to reduce this perf
ormance penalty, and some researchers have argued for applying receive
r class prediction in hybrid languages like C++. We performed a detail
ed examination of the dynamic profiles of eight large object-oriented
applications written in C++ and Cecil, determining that the receiver c
lass distributions are strongly peaked and stable across both inputs a
nd program versions through time. We describe techniques for gathering
and manipulating profile information at varying degrees of precision,
particularly in the presence of optimizations such as inlining. Our i
mplementation of profile-guided receiver class prediction improves the
performance of large Cecil applications by more than a factor of two
over solely static optimizations.