| |
10
konzipiert worden, können aber in angepasster Form auch für inkrementelle GC auf
Einzelprozessormaschinen eingesetzt werden. Als Beispiele werden Dijkstras On the
Fly Collector und Steeles Multiprocessing, Compactifying Algorithmus herangezogen,
die beide eine Incremental- Update Write-Barrier verwenden. Daneben ist bei den paral-
lelen Mark-Sweep-Algorithmen auch der Algorithmus von Kung und Song von Bedeu-
tung [Ku77]. Von Yuasas inkrementellem Algorithmus für eine sequenzielle Architek-
tur [Yu90] soll lediglich die Write-Barrier als einziges Beispiel einer Snapshot-at-
beginning Barriere dargestellt werden. Zunächst wird erläutert, wie die Update-
Funktion bei Mut atortätigkeit in den drei Write-Barrier umgesetzt wird. Danach wird
für Steeles Algorithmus der Markierungsvorgang näher erklärt.
Update-Funktion bei Mutatortätigkeit
Dijkstras Write- Barrier ist insofern konservativ, als dass alle weißen Zellen grau gefärbt
werden, wenn auf sie mittels Update-Funktion referenziert wird (siehe Ze lle C in Abb.
2a), unabhängig davon welche Farbe die Elternzelle hat. Bei Abb. 2 ist noch zu beach-
ten, dass mindestens eine andere Referenz auf C in der Ausgangssituation vorliegt. In
Algorithmus 1 ist zu sehen, wie das Herstellen eines Verweises von (dem schwarzen) A
auf (das weiße) C mittels der Update-Funktion durchgeführt wird:
shade (P) =
if white (P)
colour (P) = grey
Update (A,C) =
*A =C
shade (C)
Quelle: [S. 192, Jo96]
Algorithmus 1: Dijkstras Incremental-Update Write-Barrier
Abbildung 2: Update-Funktion in Dijkstras und Steeles Write-Barrier
Mark-Stack
A
C
A
C
A
C
A
C
B
B
B
B
Update (A,C)
Update (A,C)
a) Dijkstras Write-Barrier
b) Steeles Write-Barrier
|  |
|
| |
|
|