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.