Sealed Calls in Java Packages [abstract] (ACM DL)
Ayal Zaks, Vitaly Feldman, and Nava Aizikowitz
Proceedings of the Annual ACM SIGPLAN Conference on
Object-Oriented Programming, Systems, Languages, and
Applications (OOPSLA), October 2000.
Determining the potential targets of virtual method invocations
is essential for inter-procedural optimizations of object oriented
programs. It is generally hard to determine such
targets accurately. The problem is especially difficult for
dynamic languages such as Java, because additional targets
of virtual calls may appear at runtime. Current mechanisms
that enable inter-procedural optimizations for dynamic languages,
repeatedly validate the optimizations at runtime.
This paper addresses this predicament by proposing a novel
technique for conservative devirtualization analysis, which
applies to a significant number of virtual calls in Java programs.
Unlike previous work, our technique requires neither
whole program analysis nor runtime information, and incurs
no runtime overhead. Our solution is very efficient to
compute and is based on a newly introduced, seemingly unrelated
security feature of Java file archives. On average, our
analysis "seals" (safely devirtualizes) about 39% of the virtual
calls (to non-final methods) that appear in SPECjvm98
programs, and about 29% of the calls invoked while executing
these programs. In the runtime library rt.jar, about 10%
of the packages contain a significant percentage (20.60%) of
sealed calls, with a total average of about 8.5%. Most of
these calls are also shown to be monomorphic, a fact which
can be safely exploited by aggressive inter-procedural optimizations
such as direct inlining. These results indicate
that our technique has a strong potential for enhancing the
analysis and optimization of Java programs.