Invocation profile characterization of Java applications

Low performance of Java code execution (J. Gosling et al., 1996) has risen in the computer science community the awareness of the need for reengineering. This is mainly due to the software layer called Java Virtual Machine (T. Lindholm and F. Yellin, 1997), which allows Java applications to be multiplatform, but also to object oriented languages features, that impose a higher performance cost than procedural languages (B. Calder et al., 1994). Dynamic message dispatching (also called virtual invocation), for instance, is the mechanism that allows polymorphism, one of the most interesting features of object oriented technology. Comparing this mechanism with a statically resolved function call, two kinds of overhead can be singled out (a direct cost and an indirect cost) (K. Driesen and U. Holzle, 1996), that make the utilization of virtual invocations time-consuming. The authors present an analysis of the invocation profile of Java applications, assessing the actual necessity for dynamic dispatching, analyzing the related performance costs and determining rules for an algorithm for the automatic inlining of methods.