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
E{\mathcal{E}}
as an abstract interpretation of concrete states, which we then refine into an abstract domain
ER{\cal ER}
which is more concrete than
E{\mathcal{E}}
and, hence, leads to a more precise escape analysis than
E{\mathcal{E}}
. We provide optimality results for both
E{\mathcal{E}}
and
ER{\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
ER{\cal ER}
is hence an implementation of a formally correct escape analyser, able to detect the stack allocatable creation points of
Java (bytecode) applications.
Keywords Abstract interpretation - Denotational semantics - Garbage collection