Establishing Local Temporal Heap Safety Properties with Applications to Compile-Time Memory Management

We present a framework for statically reasoning about temporal heap safety properties. We focus on local temporal heap safety properties, in which the verification process may be performed for a program object independently of other program objects. We apply our framework to produce new conservative static algorithms for compile-time memory management, which prove for certain program points that a memory object or a heap reference will not be needed further. These algorithms can be used for reducing space consumption of Java programs. We have implemented a prototype of our framework, and used it to verify compile-time memory management properties for several small, but interesting example programs, including JavaCard programs.

[1]  Elliot K. Kolodner,et al.  Heap profiling for space-efficient Java , 2001, PLDI '01.

[2]  James C. Corbett,et al.  Bandera: extracting finite-state models from Java source code , 2000, ICSE.

[3]  David Detlefs,et al.  Garbage collection and local variable type-precision and liveness in Java virtual machines , 1998, PLDI.

[4]  Fred B. Schneider,et al.  Enforceable security policies , 2000, TSEC.

[5]  Mooly Sagiv,et al.  Estimating the impact of heap liveness information on space consumption in Java , 2002, ISMM '02.

[6]  Bruno Blanchet,et al.  Escape analysis for object-oriented languages: application to Java , 1999, OOPSLA '99.

[7]  Thomas Colcombet,et al.  Enforcing trace properties by program transformation , 2000, POPL '00.

[8]  Sorin Lerner,et al.  ESP: path-sensitive program verification in polynomial time , 2002, PLDI '02.

[9]  Alexander Aiken,et al.  Better static memory management: improving region-based analysis of higher-order languages , 1995, PLDI '95.

[10]  Reinhard Wilhelm,et al.  Parametric shape analysis via 3-valued logic , 2002, TOPL.

[11]  Martin Elsman,et al.  Combining region inference and garbage collection , 2002, PLDI '02.

[12]  Andrew W. Appel,et al.  Compiling with Continuations , 1991 .

[13]  Thomas W. Reps,et al.  Putting static analysis to work for verification: A case study , 2000, ISSTA '00.

[14]  Jeffrey M. Barth Shifting garbage collection overhead to compile time , 1977, CACM.

[15]  Geoff W. Hamilton,et al.  Compile-Time Garbage Collection for Lazy Functional Languages , 1995, IWMM.

[16]  Rafael Dueire Lins,et al.  Garbage collection: algorithms for automatic dynamic memory management , 1996 .

[17]  Ian T. Foster,et al.  Copy Avoidance through Compile-Time Analysis and Local Reuse , 1991, ISLP.

[18]  Katsuro Inoue,et al.  Analysis of functional programs to detect run-time garbage cells , 1988, TOPL.

[19]  Shmuel Sagiv,et al.  Building a Bridge between Pointer Aliases and Program Dependences , 1998, Nord. J. Comput..

[20]  Sriram K. Rajamani,et al.  SLIC: A Specification Language for Interface Checking (of C) , 2002 .

[21]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[22]  Shmuel Sagiv,et al.  TVLA: A System for Implementing Static Analyses , 2000, SAS.

[23]  Laurie Hendren,et al.  Soot---a java optimization framework , 1999 .

[24]  Amer Diwan,et al.  On the usefulness of type and liveness accuracy for garbage collection and leak detection , 2002, TOPL.

[25]  Noam Rinetzky,et al.  Interprocedural Shape Analysis for Recursive Programs , 2001, CC.

[26]  Lars Birkedal,et al.  From region inference to von Neumann machines via region representation inference , 1996, POPL '96.

[27]  Phil Pfeiffer,et al.  Dependence analysis for pointer variables , 1989, PLDI '89.

[28]  Mads Tofte,et al.  Implementation of the typed call-by-value λ-calculus using a stack of regions , 1994, POPL '94.

[29]  Elliot K. Kolodner,et al.  Automatic Removal of Array Memory Leaks in Java , 2000, CC.

[30]  Patrick Cousot,et al.  Systematic design of program analysis frameworks , 1979, POPL.