2008-10-29 4 views
10

Ich interessiere mich dafür, wie Garbage Collection funktioniert. Ich habe gelesen, wie einige arbeiten wie Mark-and-Sweep, Stop-and-Copy, Generations-GC, etc ... Ich würde gerne mit der Implementierung einiger von diesen experimentieren und deren Verhalten vergleichen. Was ist eine gute Möglichkeit, mit meinen eigenen Erfahrungen zu experimentieren? Im Idealfall etwas in C, Java oder Python (obwohl die letzten beiden selbst Müll-gesammelt sind, so scheint es, es wäre schwierig, sie zu verwenden ...)Wie kann ich mit der Garbage Collection experimentieren?

Antwort

14

Ich habe nie selbst damit gespielt, aber der, der immer für die Verwendung mit C/C++ erwähnt wird, ist Hans Boehm's.

+0

Nur um hinzuzufügen, dass dies als * der * Garbage Collector der Wahl gilt, wenn Sie in C/C++ anstelle einer VM bleiben wollen ... –

+0

+1, verwende ich es häufig, wenn ich an etwas extrem arbeite Komplex, wo eine doppelte freie() würde Katastrophe bedeuten. –

+0

Das stimmt, es ist auch der GC, der vom gcc-Projekt verwendet wird. – none

0

Implementieren Sie Ihre eigenen JVM. Nichts Besonderes, nur die Grundlagen. Es gibt viele und viele Programme/Compiler/Sprachen, die JVM-Code generieren, so dass Sie viel Material zum Testen haben.

2

Die .NET Runtime und Java Runtime sind jetzt Open Source, so dass Sie mit der Laufzeit selbst experimentieren können, wenn Sie mit einer aktuellen Support-Programmiersprache spielen möchten. Wenn Sie dies jedoch selbst tun möchten, müssten Sie wahrscheinlich Ihre eigene Runtime mit einer eigenen Sprache erstellen.

0

Spaß zu spielen, aber Müllsammlung ist eine dunkle Kunst. Damit es nicht funktioniert, sondern damit es mit der Effizienz arbeitet, die die neuesten VMs bieten.

Wir reden mehrstufig und Magie, die Zuweisungen Geschwindigkeit vergleichbar mit Stapelzuweisungen als Malloc macht.

Das ganze eden Konzept rockt.

Sie könnten einige Whitepaper zu den verwendeten Techniken lesen.

Hier ist ein Artikel, der einen guten Überblick zu haben scheint (nur von einem schnellen google/Scan)

http://www.devx.com/Java/Article/21977/0/page/1

+0

-1: "Müllsammlung ist eine dunkle Kunst". Tut mir leid, aber ich denke, es ist kontraproduktiv, solche Anweisungen zu machen, wenn Sie in 100 Codezeilen einen anständigen Garbage Collector schreiben können. –

+1

@Jon Harrop Ein einfacher GC ist einfach (genau das, was ich in meiner Antwort gesagt habe), was eine dunkle Kunst ist, macht es mit der Effizienz der neueren VMs arbeiten. Stimmst du wirklich nicht damit überein? Haben Sie untersucht, was die neuen VMs tun? –

+0

@Bill: Ich habe das gebloggt: http://flyingfrogblog.blogspot.com/2010/09/are-multicore-capable-garbage.html –

0

MMTk enthält eine große Reihe von Hochleistungsmüllsammlern. Es umfasst:

  • Kopieren Kollektoren
  • Tracing Kollektoren
  • Referenzzählung Sammler

Es hat auch:

  • Stoppen Sie die Welt Sammler
  • Concurrent Sammler

Da es eine Forschungsplattform ist, hat es einige Voraus Sammler wie die generation reference counting collector.