2008-10-20 4 views
6

Ich schreibe ein Programm, das einen generationellen Garbage Collector enthält. Es gibt nur zwei Generationen. Was ich mich wundere ist: Wenn ich eine vollständige Sammlung mache, bekomme ich irgendetwas (performance-weise), indem ich zuerst die jüngeren Objekte sammle, die Überlebenden der alten Generation fördere und dann die alte Generation sammle, oder sollte ich einfach Müll sammeln ein Schwung? Ich bin mir nicht sicher, auf welche Weise die Leute es normalerweise tun.Solltest du die junge Generation zuerst in einer vollen Müllsammlung sammeln?

Ich verwende jetzt die Zwei-Schritt-Methode, da es etwas einfacher zu implementieren war, aber vielleicht wäre eine Ein-Schritt-Methode effizienter?

Der Garbage Collector kopiert nicht, wenn das wichtig ist.

Antwort

5

Es hängt davon ab, wie oft Sie Überlebende fördern. Wenn Sie sie oft bewerben, dann sieht es so aus, als würden Sie viel besser sein, wenn Sie GC in einem Zug durchführen. Wenn nicht, dann sieht es so aus, als wären sie ziemlich ähnlich.

Wie auch immer, es scheint, als ob Sie ein wenig redundante Arbeit machen, indem Sie es in zwei Phasen tun. Zum Beispiel wird jeder, der befördert wird, inhärent zweimal überprüft (einmal als jung und wieder als alt). Wenn dies nicht zu oft passiert, bleibe ich bei der einfacheren zweistufigen Methode (da sie bereits funktioniert und es wenig zu gewinnen gibt).