2012-03-26 7 views
12

Die page on the garbage collector gibt nicht an, ob D einen inkrementellen Garbage Collector oder eine Stop-the-World-Version verwendet. Es erwähnt einige Male pausieren, die ein Hinweis auf einen Stop-the-World-Müllsammler sein könnte, aber ich bin mir nicht sicher.Verwendet die Programmiersprache D einen inkrementellen Garbage Collector?

Wenn kein inkrementeller Garbage Collector verwendet wird, gibt es dafür besondere Gründe? Ein Stop-the-World-GC erschwert interaktive Anwendungen.

Antwort

13

Aktuelle Implementierungen (Druntime) verwenden einen stop-the-world-Garbage Collector, aber die Sprache selbst stellt keine großen Einschränkungen für die Details einer Implementierung.

Es gibt einen gleichzeitigen Garbage Collector für D, , für * nix-ähnliche Betriebssysteme (es verwendet Forking).

Inkrementelle GCs sind in einer kompilierten Umgebung aufgrund der Notwendigkeit von Schreibbarrieren schwierig zu verwenden. VMs können Verweise nachverfolgen, jedoch können Systemsprachen, die memcpy und ähnliche Funktionen aufrufen können, nicht.

+0

Hallo Haider Fan (ja, mein Avatar ist von Haunter inspiriert)! Warum muss ein inkrementeller Garbage Collector Barrieren schreiben? – orlp

+6

"Incremental garbage collection" bedeutet normalerweise, dass der Anwendungscode zwischen den Punkten laufen darf, wenn der Heap-Scan gestartet und beendet wird. Ein Objekt wird als Müll betrachtet und gesammelt, wenn der GC keine Referenzen darauf finden kann ... das Problem tritt auf, wenn der GC den Speicherblock A durchsucht, dann verschiebt der Anwendungscode die einzige Referenz auf ein Objekt von Block B nach A und dann scannt der GC Block B. Wenn der GC nicht merkt, dass der Block A nach dem Scannen geändert wurde, sieht er niemals Referenzen auf das Objekt und verwirft sie. –

+0

Das ist falsch, es braucht nicht unbedingt Schreibbarrieren im Anwendungscode. Es benötigt Zugriff auf die MMU, um Speicherschreibvorgänge zu verfolgen - unter Windows haben wir eine Memory-Watch-API. Es ist keine Magie und nicht wirklich schwierig. – Lothar

Verwandte Themen