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.
[1]
Andrew A. Chien,et al.
Precise concrete type inference for object-oriented languages
,
1994,
OOPSLA 1994.
[2]
A. P. Yershóv.
ALPHA—An Automatic Programming System of High Efficiency
,
1966,
JACM.
[3]
Scott A. Mahlke,et al.
Profile‐guided automatic inline expansion for C programs
,
1992,
Softw. Pract. Exp..
[4]
Alessandro De Gloria,et al.
Ultrasparc Instruction Level Characterization of Java Virtual Machine Workload
,
1999
.
[5]
Karel Driesen,et al.
The direct cost of virtual function calls in C++
,
1996,
OOPSLA '96.
[6]
Dirk Grunwald,et al.
Quantifying Behavioral Differences Between C and C++ Programs
,
1994
.
[7]
Urs Hölzle,et al.
Optimizing dynamically-dispatched calls with run-time type feedback
,
1994,
PLDI '94.
[8]
David Grove,et al.
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
,
1995,
ECOOP.