In this book we have discussed various aspects of object oriented
systems and their optimizations. We have mainly explored dynamic
dispatch, one of the key language features of object oriented
programming paradigm along with devirtualization, an optimization
technique to resolve dynamic dispatch to particular function calls. We
have also studied dynamic dispatch table construction which is used to
enable dynamic dispatch and method inlining as the post-devirtualization
optimization. Precise type analysis techniques have been proposed for
the whole program and code component to achieve static devirtualization
of the dynamic dispatches in the code. After devirtualization, certain
call patterns are identified using which better method inlining has been
achieved with reduced code growth. Efficient construction of the
dispatch table has also been proposed using type analysis to reduce the
size of the dispatch table which in turn helps to reduce the overhead of
the execution systems.