Śmieci muszą odwiedzić wszystkie żywe obiekty, aby znaleźć pamięć, którą można odzyskać. (Posiadanie wielu pokoleń tylko trochę to opóźnia)
Mimo że wszystko jest takie samo, zdecydowanie lepiej jest najpierw odwiedzić obiekt, który jest już przywoływany do pamięci RAM, a następnie przywołać inny blok, a zatem wywołać jakiś obiekt.
Inną możliwością jest to, że gdy OS chce zabrać stronę pamięci RAM z procesu, GC jest najpierw pytana, czy ma stronę, którą można zrezygnować bez konieczności stronicowania. GC można wykonać głównie z ruchomymi obiektami ze strony, więc można wyczyścić tę stronę w terminie wymaganym przez system operacyjny na potrzeby strony.
Jednak nie mogę sobie przypomnieć żadnego śmieciarza zintegrowanego z systemem stronicowania systemu operacyjnego, który steruje kolejnością działania GC.
źródło
Odpowiedzi:
O ile pamiętam, kolektory kopii powinny być przyjazne dla stronicowania, ponieważ śledzenie przez kopiowanie ma tendencję do poprawiania lokalizacji odniesień wskaźnika. Ma to pozytywny wpływ na program (mutator), który spowoduje mniej błędów strony podczas podążania za linkami, a także poprawi następny cykl zbierania, ponieważ śledzenie spowoduje również mniej błędów strony. Program śledzenia (które wskaźniki powinny zostać przetworzone w pierwszej kolejności) może mieć wpływ na skuteczność poprawiania lokalizacji danych. Można to poprawić, mierząc statystyki dotyczące liczby dostępu do różnych wskaźników w różnych typach komórek.
Teraz, jeśli weźmiesz pod uwagę kolekcjoner śledzenia w ogóle, zwykle musisz zachować strukturę, która śledzi wskaźniki, które nie zostały jeszcze wyśledzone. Może być możliwe zorganizowanie tej struktury tak, aby wszystkie oczekujące wskaźniki wskazujące na tej samej stronie były trzymane razem (chociaż może to zająć więcej miejsca, w niektórych przypadkach, w zależności od dostępnych technik utrzymania listy takich wskaźników). Możliwą zasadą jest wtedy, aby zawsze najpierw prześledzić największy zestaw wskaźników oczekujących wskazujących na tę samą stronę, gdy nie ma wskaźnika oczekującego na stronach w pamięci.
Jeśli chodzi o pytanie z trzeciego akapitu, które zostało dodane po tym, jak odpowiedziałem, kolekcja kopii jest znowu odpowiedzią. System operacyjny może zmniejszyć liczbę przydzielonych fizycznych stron w czasie zbierania, ponieważ strony są całkowicie zwolnione. W przypadku kolekcjonowania znaczników i wymiatania wydarzenie uwolnienia całej strony jest prawdopodobnie znacznie rzadsze, a zatem nie jest warte szczególnego machanizmu, który należy wziąć pod uwagę.
Tego rodzaju pomysły są naturalne i prawdopodobnie zostały opisane w niektórych artykułach. Ale nie przypominam sobie tego z ręki. Myślę, że wczesne artykuły na temat Lisp GC zawierają niektóre z tych pomysłów (na przykład: czy najpierw należy zastosować samochód czy CDR?).
Dobrą wiadomością w tej roli kopiowania kolekcji jest również to, że stronicowanie jest przyjazne dla kopiowania kolekcji, ponieważ zwiększa dostępną przestrzeń dyskową. Przypomnijmy, że moduł zbierający kopie wymaga zasadniczo dwa razy więcej miejsca niż używany do faktycznego przechowywania danych. Teraz efekt stronicowania zależy również od przestrzeni adresowej komputera i dostępnej pamięci fizycznej. Na starszym komputerze pamięć fizyczna była znacznie mniejsza niż dostępna przestrzeń adresowa, więc stronicowanie było naprawdę dodatkową przestrzenią, umożliwiając takie zasady, jak kopiowanie GC. Nawet gdy przestrzeń fizyczna jest tak duża jak przestrzeń adresowa, można chcieć ją udostępnić, aby proces korzystający z GC miał mniej przestrzeni adresowej bez stronicowania (patrz stronicowanie). Uwagi te są nieco zastąpione przez zastosowanie kolektorów pokoleniowych. Zasadniczo używają kolekcji kopii dla młodego pokolenia właśnie ze względu na te cechy i dlatego, że młode pokolenie jest przeważnie krótkotrwałe.
Masz wtedy wszystkie interakcje generacyjnej GC z systemem pamięci podręcznej, co zostało omówione w poprzednim pytaniu: Czy generatory śmieci są z natury przyjazne dla pamięci podręcznej?
Aby uzyskać więcej informacji na ten temat, szukałbym w Internecie, na przykład, słów kluczowych wyrzucanie elementów bezużytecznych i lokalizacja .
źródło
Emery Berger, Matthew Hertz i Yi Feng pracowali nad tym.
To jest wideo z rozmowy Emery'ego na ten temat, a on napisał papierową wersję Śmieci bez stronicowania
Z niektórych powodów wydaje się, że nie będzie o wiele późniejszej pracy nad tym ani użycia w „świecie rzeczywistym”. Na końcu artykułu napisano: „Opracowujemy równoległy wariant algorytmu zbierania zakładek” , ale nie mogę go wyśledzić.
CRAMM: Obsługa pamięci wirtualnej dla aplikacji Garbage-Collected sprawdza zmianę systemu operacyjnego, aby GC tworzyło mniej stronicowania.
Wykorzystanie rezydencji strony do zrównoważenia kompromisów w śledzeniu usuwania śmieci
źródło