Garbage Collection: Concurrent mark phase
-
Hoi,
hat jemand eine Ahnung, wie es beispielsweise so unbekannten Firmen wie Sun und Microsoft gelingt, die mark phase (wohl der aufwändigere Teil der garbage collection) bei ihren GCs parallel zur Programmausführung laufen zu lassen?
Ich stelle mir das schwierig vor. Es könnte doch z.B. sein, dass ein Objekt, dessen Referenzen schon abgearbeitet sind, während der mark phase beschrieben wird und deshalb Objekte referenziert, die aber nicht mehr als referenziert bekannt werden?
Beispiel: Während Objekt a untersucht wird, referenziert es keine anderen Objekte, aber b referenziert c. Jetzt werden andere Objekte untersucht und währenddessen wird durch die Programmausführung das Objekt b so verändert, dass es c nicht mehr referenziert, aber dafür a jetzt c referenziert. Später wird b untersucht, referenziert aber nichts mehr, also ist c jetzt völlig unbekannt, weil nie erreicht.
(Wahrscheinlich checkt jetzt keiner, was ich meine)Ich finde es echt erstaunlich, dass angeblich während der mark phase alle Threads voll weiterlaufen können, wie wird das bewerkstelligt, dass es auch sicher ist?
(In der Hoffnung, dass jemand von Sun mitliest)
Achja, ich habe mich durchaus in das Thema eingearbeitet, aber ich habe bisher in keinem Artikel etwas zu konkret diesem Problem (wie ich finde) gefunden.