Typowy generacyjny moduł wyrzucający elementy bezużyteczne przechowuje ostatnio przydzielone dane w osobnym regionie pamięci. W typowych programach wiele danych jest krótkotrwałych, więc częste zbieranie śmieci (niewielki cykl GC) i rzadkie zbieranie starych śmieci jest dobrym kompromisem między narzutem pamięci a czasem spędzonym na GC.
Intuicyjnie korzyść generatora śmieciowego generatora w porównaniu z kolektorem jednoregionalnym powinna wzrosnąć wraz ze wzrostem współczynnika opóźnienia pamięci głównej w stosunku do pamięci podręcznej, ponieważ dane w młodym regionie są często dostępne i przechowywane w jednym miejscu. Czy wyniki eksperymentów potwierdzają tę intuicję?
programming-languages
computer-architecture
cpu-cache
garbage-collection
Gilles „SO- przestań być zły”
źródło
źródło
Odpowiedzi:
Oto kilka artykułów, które mówią o implikacjach pamięci podręcznej generatorów śmieci:
Z tego, co mogę zebrać, głównym problemem jest to, że śmieciowe systemy odkładają miejsce w pamięci, aby uniknąć wstępnego zbierania. To samo dotyczy pamięci podręcznej. Jak zasugerowałeś, rzeczy w pierwszej generacji najprawdopodobniej będą znajdować się w pamięci podręcznej, więc ich przydzielanie i zbieranie będzie znacznie szybsze niż coś w pamięci głównej lub przeniesienie na dysk. Głównym problemem jest rozmiar pierwszej generacji w odniesieniu do wielkości pamięci podręcznej. Jeśli pamięć podręczna zapełni się, zanim zrobi to pierwsza generacja, zaczniesz tracić te korzyści w miarę narastania braków.
źródło
Istnieje bardzo trudny aspekt wszystkich śmieciarek, które mogą być pomijane w niektórych opisach, a mianowicie „pełne skanowanie” lub „pełne zbieranie”. Okresowo, losowo, sporadycznie muszą skanować wszystkie obiekty. kolekcjonerowie pokoleniowi lepiej odkładają pełny skan i minimalizują czas jego trwania, ale nadal jest on wymagany.
Kolektor pokoleniowy skoncentruje się na przestrzeni zwanej czasem „żłobkiem”, ale ostatecznie / nieuchronnie będzie musiał gromadzić się w przestrzeni „starszej” generacji, powodując pełny skan pamięci.
To pełne skanowanie jest niekompatybilne z prawie wszystkimi schematami buforowania pamięci i (szczególnie!) Schematów wirtualizacji w tym sensie, że prawie wszystkie schematy buforowania pamięci / wirtualizacji będą / musiały zawieść przy jakiejkolwiek poprawie wydajności w tym przypadku.
Tak więc kluczową odpowiedzią na to pytanie jest to, jak często uruchamiany jest pełny skan i jak „zły” jest jego efekt, gdy się to dzieje, i czy można go tolerować. sprowadza się to do bardziej zależnej od aplikacji właściwości / pytania.
Innymi słowy dla „większości” działania kolektora, pamięć podręczna prawdopodobnie mu pomoże (pamięć podręczna i „młoda” przestrzeń żłobkowa na ogół się pokrywają!), Ale są okresowe, przerywane, ewentualne, nieuniknione, ciężkie, może nawet „masywny” [degradujący] wzrost wydajności, gdy przestrzeń „starej generacji” zostanie zapełniona, a „współczynnik trafień” w pamięci podręcznej ulegnie pogorszeniu do bardzo złego, ponieważ wiele obiektów poza nią jest w całości połączonych w ciasną pętlę cykl skanowania / pobierania. Innymi słowy, nieunikniona okresowa nieciągłość (gdzie szacunki statystyczne / średnie / trendy wydajności itp. Wprowadzają w błąd i nie mają zastosowania).
Obecnie pojawiają się nowe systemy gromadzenia danych, które zostały zaprojektowane do współpracy z bazowymi systemami zarządzania pamięcią (buforowanie / wirtualizacja). wydaje się, że podejścia historyczne, które całkowicie oddzielają oddzielne systemy gromadzenia pamięci, buforowania i wirtualizacji, nie będą działać tak dobrze, jak podejścia łączące / integrujące / zajmujące się wszystkimi trzema aspektami razem.
Zobacz np. Zbieranie śmieci ze świadomością pamięci podręcznej przez Zhou i Demsky'ego.
źródło