Practical virtual method call resolution for Java

  • Authors:
  • Vijay Sundaresan;Laurie Hendren;Chrislain Razafimahefa;Raja Vallée-Rai;Patrick Lam;Etienne Gagnon;Charles Godin

  • Affiliations:
  • IBM Toronto and Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada H3A 2A7;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada 3HA 2A7;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada H3A 2A7 and University of Geneva;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada 3HA 2A7;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada 3HA 2A7 and MIT;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada 3HA 2A7;Sable Research Group, School of Computer Science, McGill University, Montreal, Quebec, Canada 3HA 2A7

  • Venue:
  • OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
  • Year:
  • 2000

Quantified Score

Hi-index 0.00

Visualization

Abstract

This paper addresses the problem of resolving virtual method and interface calls in Java bytecode. The main focus is on a new practical technique that can be used to analyze large applications. Our fundamental design goal was to develop a technique that can be solved with only one iteration, and thus scales linearly with the size of the program, while at the same time providing more accurate results than two popular existing linear techniques, class hierarchy analysis and rapid type analysis.We present two variations of our new technique, variable-type analysis and a coarser-grain version called declared-type analysis. Both of these analyses are inexpensive, easy to implement, and our experimental results show that they scale linearly in the size of the program.We have implemented our new analyses using the Soot frame-work, and we report on empirical results for seven benchmarks. We have used our techniques to build accurate call graphs for complete applications (including libraries) and we show that compared to a conservative call graph built using class hierarchy analysis, our new variable-type analysis can remove a significant number of nodes (methods) and call edges. Further, our results show that we can improve upon the compression obtained using rapid type analysis.We also provide dynamic measurements of monomorphic call sites, focusing on the benchmark code excluding libraries. We demonstrate that when considering only the benchmark code, both rapid type analysis and our new declared-type analysis do not add much precision over class hierarchy analysis. However, our finer-grained variable-type analysis does resolve significantly more call sites, particularly for programs with more complex uses of objects.