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 .