Tak, gc jest amortyzowane przez stały czas. Załóżmy, że masz algorytm działający przez czas ze szczytowym zestawem roboczym o rozmiarze k . Teraz zauważ, że możesz przydzielić co najwyżej O ( n ) słowa podczas wykonywania programu, a koszt czasu uruchomienia kopiującego śmietnika wynosi O ( k ) (tj. Koszt gc jest proporcjonalny do sumy ilość danych na żywo). Jeśli więc uruchomisz gc co najwyżej O ( n / k ) razy, wówczas całkowity koszt środowiska wykonawczego jest ograniczony przez O ( n )nkO ( n )O(k)O(n/k)O(n), co oznacza, że zamortyzowany koszt gc jest stały. Jeśli więc masz kolektor w stylu Cheneya, a każdy półprzestrzeń ma rozmiar , łatwo zauważyć, że nie można wywołać pełnej kolekcji więcej niż raz na n / k kroków, ponieważ przydzielenie k słów zajmuje O ( k ) czas, a zestaw roboczy nigdy nie przekracza rozmiaru k , co daje ci pożądaną granicę. Uzasadnia to ignorowanie problemów z GC.2kn/kkO(k)k
Jednak jednym z przypadków, w których obecność lub nieobecność gc nie można pominąć, jest pisanie struktur danych bez blokady. Wiele nowoczesnych, pozbawionych blokad struktur danych celowo wycieka pamięć i polega na gc w zakresie poprawności. Wynika to z faktu, że na wysokim poziomie działają one w taki sposób, że kopiują niektóre dane, wprowadzają w nich zmiany i próbują atomowo aktualizować je za pomocą instrukcji CAS i uruchamiać to w pętli, aż CAS się powiedzie. Dodanie deterministycznego dezalokacji do tych algorytmów sprawia, że są one znacznie bardziej złożone, dlatego ludzie często nie przejmują się tym (zwłaszcza, że często są one ukierunkowane na środowiska podobne do Java).
EDYCJA: Jeśli chcesz granice bez amortyzacji, kolekcjoner Cheney tego nie zrobi - skanuje cały zestaw na żywo za każdym razem, gdy jest wywoływany. Słowo kluczowe dla wyszukiwarki Google to „odśmiecanie w czasie rzeczywistym”, a Djikstra i in. a Steele dała pierwsze kolekcjonerskie markery w czasie rzeczywistym, a Baker pierwszy gc.
@article {dijkstra1978fly,
title = {{Odrzucanie śmieci w locie: ćwiczenie we współpracy}},
autor = {Dijkstra, EW i Lamport, L. i Martin, AJ i Scholten, CS i Steffens, EFM},
journal = {Komunikacja ACM},
wielkość = {21},
liczba = {11},
strony = {966--975},
issn = {0001-0782},
rok = {1978},
wydawca = {ACM}
}
@article {steele1975multiprocessing,
title = {{Multiprocessing compactifying garbage collection}},
autor = {Steele Jr, GL},
journal = {Komunikacja ACM},
wolumin = {18},
liczba = {9},
strony = {495--508},
issn = {0001-0782},
rok = {1975},
wydawca = {ACM}
}
@article {baker1978list,
title = {{Przetwarzanie listy w czasie rzeczywistym na komputerze szeregowym}},
autor = {Baker Jr, HG},
journal = {Komunikacja ACM},
wielkość = {21},
liczba = {4},
strony = {280--294},
issn = {0001-0782},
rok = {1978},
wydawca = {ACM}
}