Wpis z mikrobloga

Mirki mógłby ktoś wyjaśnić jak działa G1 Garbage Collector, a szczególnie skąd on wie, że należy usunąć dany obiekt?
Przeczytałem o dzieleniu heapa na małe elementy max 2048 i oznaczaniu ilości live and dead objects. Ale dalej nie wiem, skąd wie, żeby usunąć dany obiekt lub zbiór. Dead objects to są obiekty do usunięcia w przyszłości jakby gc uznał, że potrzebna jest wolna pamięć?

Co oznacza "Garbage first?"

Przy podejściu mark and sweep we wcześniejszych gc, są oznaczane obiekty które mają referencje, reszta jest wywalana.

#java #naukaprogramowania #programowanie
  • 9
@famir96: G1 skanuje okresowo całą stertę w podobny sposób jak każdy inny GC (parallel, CMS). Skanowanie rozpoczyna się od wskaźników na stosie oraz od zmiennych globalnych (np static) i po prostu podąża za wskaźnikami, aż przejrzy cały graf obiektów. W ten sposób zaznacza wszystkie obiekty które są dostępne tj które nie mogą być usunięte. GC nie znajduje bezpośrednio obiektow do usunięcia. Sprzątanie polega na przeniesieniu wszystkich żywych obiektów z jednego bloku
@diabel_z_piekla: nie ma oznaczania martwych obiektów - wszystkie tracing GC szukają żywych obiektów i jako martwe traktują wszystko co pozostało. Dzięki temu mogą posprzatac obiekty z cyklami referencji. Martwe obiekty wyszukują GC oparte o zliczanie referencji, ale to nie w Javie tylko np. tak działa Python i Swift (i ma to pewne zalety jak i wady).