Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym jest Garbage Collector w Ruby? Jak działa i do czego potrzebny jest GC?

Ta treść została automatycznie przetłumaczona z ukraińskiego.
Garbage Collector (zbieracz śmieci) w Ruby to zautomatyzowany mechanizm zarządzania pamięcią, który odpowiada za monitorowanie i zwalnianie pamięci, która nie jest już używana przez program. GC sprawia, że pamięć, która została przydzielona dla obiektów, które nie są już potrzebne programowi, może być ponownie wykorzystana, tym samym optymalizując zasoby systemu.
Po prostu wyobraź sobie, że w pamięci pozostają obiekty, które są niepotrzebne. Ich liczba stale rośnie. Pojawia się wyciek pamięci. Serwer może przestać odpowiadać, a w przypadku skalowania - twoje rachunki będą tylko rosnąć. Dlatego GC jest potrzebny do efektywnego wykorzystania RAM.
Garbage Collector w Ruby działa na zasadzie "mark-and-sweep". Zbieracz śmieci przechodzi przez wszystkie obiekty, do których można dotrzeć z obiektów korzeniowych (na przykład zmienne lokalne i zmienne globalne), i oznacza (mark) je jako "dostępne". Po zakończeniu procesu oznaczania, zbieracz przechodzi do fazy sprzątania (sweep / zamiatanie), gdzie zwalnia pamięć od wszystkich obiektów, które nie zostały oznaczone. Te obiekty są uważane za "niedostępne" i ich pamięć (pamięć, którą wcześniej zajmowały) może być ponownie wykorzystana.
Ruby również wykorzystuje pojęcie pokoleń (Generational Garbage Collection lub GGC), które obejmuje podział obiektów na pokolenia według częstotliwości ich użycia, co pozwala na bardziej efektywne zarządzanie pamięcią, koncentrując wysiłki zbieracza śmieci na młodszych, bardziej dynamicznych obiektach, które częściej się zmieniają.
O GC zazwyczaj zaczyna się rozmawiać w momencie pojawienia się wycieku pamięci (Memory Leak) na serwerze. Oczywiście, ponowne uruchomienie serwera pomoże na jakiś czas (RAM zostanie wyczyszczona i zacznie się zapełniać ponownie), ale i tak trzeba będzie się tym zająć.

Ten post nie ma jeszcze żadnych dodatków od autora.

15 kwi 18:11

Czym są wskazówki klienta HTTP?

meme code
meme code@memecode
18 kwi 05:27

Naprawiamy ActiveRecord::ProtectedEnvironmentError w lokalnym środowisku

meme code
meme code@memecode
18 kwi 06:06

Rozbieramy błąd PG::ObjectInUse (Ruby on Rails)

meme code
meme code@memecode
27 kwi 09:29

Co to jest CC i BCC w e-mailach? Do czego i jak ich używać?

meme code
meme code@memecode
Czym jest prompt (prompt) i inżynieria promptów?
3 maj 12:08

Czym jest prompt (prompt) i inżynieria promptów?

meme code
meme code@memecode
ZOMBIE w Ruby. Co to jest?
3 maj 12:41

ZOMBIE w Ruby. Co to jest?

meme code
meme code@memecode
Trochę o typach implementacji Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
5 maj 12:36

Trochę o typach implementacji Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)

meme code
meme code@memecode
7 maj 07:24

Czym jest natywny kod maszynowy?

meme code
meme code@memecode
Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)
8 maj 07:57

Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
9 maj 12:43

[Fix] Rails Admin - niezdefiniowana lokalna zmienna lub metoda javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Czym jest dług techniczny (technical debt) w projektach IT?
13 maj 06:17

Czym jest dług techniczny (technical debt) w projektach IT?

meme code
meme code@memecode
13 maj 07:11

Co oznacza zakres (scope) w zarządzaniu projektami IT?

meme code
meme code@memecode