Opportunistic garbage collection is a non-incremental generation-based garbage collection system. It attempts to minimize the probability of disruptive pauses by careful scheduling of scavenges. Scavenge pauses are hidden in pauses created by the running program or by the user; they are also shortened by scheduling them at low points in the stack height, where live data tend to be at a minimum. These heuristics can be surprisingly simple and cheap to implement --- user input primitives provide an effective hook from which to invoke the scheduling routine, since they tend to correspond both to local stack minima and to computational pause boundaries.An additional mechanism is proposed to detect times when it is safe to scavenge an intermediate generation, based on the amount of data surviving from a new-generation scavenge. This mechanism can be used reliably in certain cases, or heuristically in a larger class of cases.
[1]
Robert Allen Shaw,et al.
Empirical analysis of a LISP system
,
1988
.
[2]
Frank Jackson,et al.
Tenuring policies for generation-based storage reclamation
,
1988,
OOPSLA '88.
[3]
David M. Ungar,et al.
Generation Scavenging: A non-disruptive high performance storage reclamation algorithm
,
1984,
SDE 1.
[4]
Henry Lieberman,et al.
A real-time garbage collector based on the lifetimes of objects
,
1983,
CACM.
[5]
Frank Jackson,et al.
Tenuring policies for generation-based storage reclamation
,
1988,
OOPSLA 1988.