Abstract
Escape analysis of object-oriented languages approximates the set of objects which do not escape from a given context. If we take a method as context, the non-escaping objects can be allocated on its activation stack; if we take a thread, Java synchronisation locks on such objects are not needed. In this paper, we formalise a basic escape domain \({\mathcal{E}}\) as an abstract interpretation of concrete states, which we then refine into an abstract domain \({\cal ER}\) which is more concrete than \({\mathcal{E}}\) and, hence, leads to a more precise escape analysis than \({\mathcal{E}}\). We provide optimality results for both \({\mathcal{E}}\) and \({\cal ER}\), in the form of Galois insertions from the concrete to the abstract domains and of optimal abstract operations. The Galois insertion property is obtained by restricting the abstract domains to those elements which do not contain garbage, by using an abstract garbage collector. Our implementation of \({\cal ER}\) is hence an implementation of a formally correct escape analyser, able to detect the stack allocatable creation points of Java (bytecode) applications.
Similar content being viewed by others
References
Agrawal, G.: Simultaneous Demand-Driven Data-flow and Call Graph Analysis. In: Proc. of the International Conference on Software Maintenance (ICSM’99), pp. 453–462. IEEE Computer Society, Oxford, UK (1999).
Aho, A.V., Sethi, R., Ullman, J.D.: Compilers, Principles Techniques and Tools. Addison Wesley Publishing Company (1986).
Arnold, K., Gosling, J., Holmes, D.: The Java™ Programming Language. 3rd edn, Addison-Wesley (2000).
Bacon, D.F., Sweeney, P.F.: Fast Static Analysis of C++ Virtual Function Calls. In: Proc. of OOPSLA’96, vol. 31(10) of ACM SIGPLAN Notices, pp. 324–341. ACM Press, New York (1996).
Blanchet, B.: Escape Analysis: Correctness Proof, Implementation and Experimental Results. In: 25th ACM SIGPLAN-SIGACT Symposium of Principles of Programming Languages (POPL’98), pp. 25–37. ACM Press, San Diego, CA, USA, (1998).
Blanchet, B.: Escape Analysis for Java: Theory and Practice. ACM TOPLAS, 25(6), 713–775 (2003).
Bogda, J., Hölzle, U.: Removing Unnecessary Synchronization in Java. In: Proc. of OOPSLA’99, vol. 34(10) of SIGPLAN Notices, pp. 35–46. Denver, Colorado, USA (1999).
Bossi, A., Gabbrielli, M., Levi, G., Martelli, M.: The s-Semantics Approach: Theory and Applications. J. Logic. Program. 19/20:149–197, 1994.
Bryant, R.E.: Graph-Based Algorithms for Boolean Function Manipulation. IEEE Trans Comput. 35(8), 677–691 (1986).
Choi, J.-D., Grove, D., Hind, M., Sarkar, V.: Efficient and Precise Modeling of Exceptions for the Analysis of Java Programs. In: Proc. of the SIGPLAN/SIGSOFT Workshop on Program Analysis For Software Tools and Engineering (PASTE’99), pp. 21–31. Toulouse, France (1999).
Choi, J.-D., Gupta, M., Serrano, M.J., Sreedhar, V.C., Midkiff, S.P.: Stack Allocation and Synchronization Optimizations for Java Using Escape Analysis. Technical Report RC22340, IBM (2002).
Choi, J.-D., Gupta, M., Serrano, M.J., Sreedhar, V.C., Midkiff, S.P.: Stack Allocation and Synchronization Optimizations for Java Using Escape Analysiss. ACM TOPLAS. 25(6), 876–910 (2003).
Cortesi, A., Filé, G., Winsborough, W.: The Quotient of an Abstract Interpretation. Theoret. Comput. Sci., 202(1–2), 163–192 (1998).
Cousot, P., Cousot, R.: Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints. In: Proc. of POPL’77, pp. 238–252 (1977).
Cousot, P., Cousot, R.: Abstract Interpretation and Applications to Logic Programs. J Logic Program, 13(2 & 3):103–179 (1992).
Cousot, P., Cousot, R.: Modular Static Program Analysis. In: Horspool, R.N. (ed.), Proceedings of Compiler Construction, vol. 2304 of Lecture Notes in Computer Science, pp. 159–178. Springer-Verlag, Grenoble, France (2002).
Dams, D.R.: Abstract Interpretation and Partition Refinement for Model Checking. PhD thesis, Eindhoven University of Technology, The Netherlands (1996).
Dean, J., Grove, D., Chambers, C.: Optimization of Object-Oriented Programs using Static Class Hierarchy Analysis. In: Olthoff, W.G. (ed.), Proc. of ECOOP’95, vol. 952 of LNCS, pp. 77–101. Springer-Verlag, Århus, Denmark, (1995).
Deutsch, A.: On the Complexity of Escape Analysis. In: 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL’97), pp. 358–371. ACM Press, Paris, France (1997).
Dovier, A., Piazza, C., Pontelli, E., Rossi, G.: Sets and Constraint Logic Programming. ACM Trans Program Lang Sys. 22(5), 861–931 (2000).
Gay, D., Steensgaard, B.: Fast Escape Analysis and Stack Allocation for Object-Based Programs. In: Watt, D.A. (ed.), Compiler Construction, 9th International Conference (CC’00), vol. 1781 of Lecture Notes in Computer Science, pp. 82–93. Springer-Verlag, Berlin (2000).
Giacobazzi, R., Ranzato, F.: Refining and Compressing Abstract Domains. In: Proc. of the 24th International Colloquium on Automata, Languages and Programming (ICALP’97), vol. 1256 of LNCS, pp. 771–781. Springer-Verlag (1997).
Giacobazzi, R., Scozzari, F.: A Logical Model for Relational Abstract Domains. ACM Trans Program Lang Sys. 20(5), 1067–1109 (1998).
Grove, D., Chambers, C.: A Framework for Call Graph Construction Algorithms. ACM TOPLAS. 23(6), 685–746 (2001).
Lhoták, H., Hendren, L.: Scaling Java Points-to Analysis using Spark. In: Hedin, G. (ed.), Proc. of Compiler Construction, vol. 2622 of Lecture Notes in Computer Science, pp. 153–169. Springer-Verlag, Warsaw, Poland (2003).
Hill, P.M., Spoto, F.: A Foundation of Escape Analysis. In: Kirchner, H., Ringeissen, C. (ed.), Proc. of AMAST’02, vol. 2422 of LNCS, pp. 380–395. Springer-Verlag, St. Gilles les Bains, La Réunion island, France (2002).
Hill, P.M., Spoto, F.: A Refinement of the Escape Property. In: Cortesi, A. (ed.), Proc. of the VMCAI’02 workshop on Verification, Model-Checking and Abstract Interpretation, vol. 2294 of Lecture Notes in Computer Science, pp. 154–166. Springer-Verlag, Venice, Italy (2002).
Hill, P.M., Spoto, F.: Logic Programs as Compact Denotations. Comput. Lang. Sys. Struct. 29(3), 45–73 (2003).
Hill, P.M., Spoto, F.: Deriving Escape Analysis by Abstract Interpretation: Proofs of results. The Computing Research Repository (CoRR): arXiv:archive.cs/PL/0607101 (2006).
Jacobs, B., Poll, E.: Coalgebras and Monads in the Semantics of Java. Theoret. Comput. Sci. 291(3), 329–349 (2003).
Jensen, T.: Disjunctive Program Analysis for Algebraic Data Types. ACM Trans. Program. Lang. Syst. 19(5), 752–804 (1997).
Jones, N.D., Søndergaard, H.: A Semantics-based Framework for the Abstract Interpretation of Prolog. In: Abramsky, S., Hankin, C. (eds.), Abstract Interpretation of Declarative Languages, pp. 123–142. Ellis Horwood Ltd (1987).
Lindholm, T., Yellin, F.: The Java™ Virtual Machine Specification. 2nd edn, Addison-Wesley. (1999).
Cousot. P., Cousot, R.: Systematic Design of Program Analysis Frameworks. In: Proc. of the Sixth Annual ACM Symposium on Principles of Programming Languages (POPL’79), pp. 269–282. ACM, San Antonio, Texas (1979).
Palsberg, J., Schwartzbach, M.I.: Object-Oriented Type Inference. In: Proc. of OOPSLA’91, volume 26(11) of ACM SIGPLAN Notices, pp. 146–161. ACM Press (1991).
Park, Y.G., Goldberg, B.: Escape Analysis on Lists. In: ACM SIGPLAN’92 Conference on Programming Language Design and Implementation (PLDI’92), vol. 27(7) of SIGPLAN Notices, pp. 116–127. San Francisco, California, USA (1992).
Rountev, A., Milanova, A., Ryder, B.G.: Points-to Analysis for Java Using Annotated Constraints. In: Proc. of ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA’01), volume 36(11), of ACM SIGPLAN, pp. 43–55. Tampa, Florida, USA (2001).
Ruf, E.: Effective Synchronization Removal for Java. In: ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI’00), vol. 35(5) of SIGPLAN Notices, pp. 208–218. Vancouver, British Columbia, Canada (2000).
Ruggieri, C., Murtagh, T.P.: Lifetime Analysis of Dynamically Allocated Objects. In: 15th ACM Symposium on Principles of Programming Languages (POPL’88), pp. 285–293. San Diego, California, USA (1988).
Salcianu, A.: Pointer Analysis and Its Application to Java Programs. PhD thesis, MIT (2001).
Salcianu, A., Rinard, M.: Pointer and Escape Analysis for Multithreaded Programs. In: Proc. of ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP’01), volume 36(7) of SIGPLAN Notices, pp. 12–23, Snowbird, Utah, USA (2001)
Scozzari, F.: Logical Optimality of Groundness Analysis. Theoret. Compu. Sci., 277(1–2), 149–184 (2002).
Søndergaard, H.: An Application of Abstract Interpretation of Logic Programs: Occur Check Reduction. In: Robinet, B., Wilhelm, R. (eds.), Proc. of the European Symposium on Programming (ESOP), vol. 213 of Lecture Notes in Computer Science, pp. 327–338. Springer, Saarbrücken, Federal Republic of Germany (1986).
Spoto, F.: The Julia Generic Static Analyser. Available at the address http://www.sci.univr.it/~spoto/julia (2004).
Spoto, F., Jensen, T.: Class Analyses as Abstract Interpretations of Trace Semantics. ACM Trans. Program. Lang. Sys. (TOPLAS), 25(5), 578–630 (2003).
Streckenbach, M., Snelting, G.: Points-to for Java: A General Framework and an Empirical Comparison. Technical report, Universität Passau, Germany (2000).
Tarski, A.: A Lattice-theoretical Fixpoint Theorem and its Applications. Pacific J. Math. 5, 285–309 (1955).
Tip, F., Palsberg, J.: Scalable Propagation-Based Call Graph Construction Algorithms. In: Proc. of OOPSLA’00, vol. 35(10) of SIGPLAN Notices, pp. 281–293. ACM, Minneapolis, Minnesota, USA (2000).
Vivien, F., Rinard, M.: Incrementalized Pointer and Escape Analysis. In: Proc. of ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI’01), volume 36(5), SIGPLAN Notices, pp. 35–46. Snowbird, Utah, USA (2001).
Whaley, J., Lam, M.S.: Cloning-Based Context-Sensitive Pointer Alias Analysis Using Binary Decision Diagrams. In: Pugh, W., Chambers, C. (eds.), Proc. of ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation (PLDI’04), pp. 131–144. ACM, Washington, DC, USA (2004).
Whaley, J., Rinard, M.C.: Compositional Pointer and Escape Analysis for Java Programs. In: 1999 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA’99), volume 34(1), SIGPLAN Notices, pp. 187–206. Denver, Colorado, USA (1999).
Winskel, G.: The Formal Semantics of Programming Languages. The MIT Press (1993).
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Hill, P.M., Spoto, F. Deriving escape analysis by abstract interpretation. Higher-Order Symb Comput 19, 415–463 (2006). https://doi.org/10.1007/s10990-006-0481-5
Issue Date:
DOI: https://doi.org/10.1007/s10990-006-0481-5