A common hazard for implementations of applicative programming languages is the excessive creation of garbage cells during program execution. The available run-time garbage collecting processes are expensive in time and often require a periodic disruption of the program execution. The present book addresses the problem of memory re-use for logic programs through program analysis rather than by run-time garbage collection. The static analysis is constructed as an application of abstractinterpretation for logic programs. The starting point is a previously developed application of integrated type and mode analysis, which basically supplies a description of the logical terms to which program variables can be bound at run time. The contribution of the book consists of a modular extension of the abstract domain and operations in order to derive run-time properties concerning the sharing and liveness of term substructures dynamically created during program execution. Alsoillustrated is how such information can be used by the compiler to improve the allocation of run-time structures and to automatically introduce destructive assignments in logic languages in a safe and transparent way, thereby shifting some part of the run-time storage reclamation overhead to compile time.