2008-10-20 10 views
6

Piszę program zawierający pokoleniowy garbage collector. Są tylko dwa pokolenia. Zastanawiam się, co się dzieje: Czy podczas wykonywania pełnej kolekcji mogę uzyskać wszystko (z punktu widzenia wydajności), najpierw zbierając młodsze przedmioty, promując tych, którzy przeżyli, do starszego pokolenia, a następnie zbierając stare pokolenie, czy też powinienem tylko zbierać śmieci w jeden zamiatać? Nie jestem pewien, w jaki sposób ludzie zwykle to robią.Czy należy najpierw pozyskać młode pokolenie w pełnym zbiorze śmieci?

Używam teraz metody dwuetapowej, ponieważ było to nieco prostsze do wdrożenia, ale być może metoda jednoetapowa byłaby bardziej wydajna?

Śmieciarz nie kopiuje, jeśli to ma znaczenie.

Odpowiedz

5

To zależy od tego, jak często promujesz ocalałych. Jeśli często je promujesz, wygląda na to, że zrobisz dużo lepiej, wykonując GC jednym ruchem. Jeśli tego nie zrobisz, wygląda na to, że będą bardzo podobne.

Tak czy inaczej wydaje się, że wykonujesz trochę nadmiarowej pracy, wykonując ją w dwóch fazach. Na przykład każdy, kto zostanie awansowany, zostaje z natury sprawdzany dwa razy (raz jako młody i znowu jako stary). Ponownie, jeśli nie zdarzy się to zbyt często, będę trzymał się prostszej metody dwuetapowej (ponieważ już to działa i niewiele można zyskać).

Powiązane problemy