ГоловнаВсі публікаціїКатегоріїПро проєкт

Що таке Garbage Collector у Ruby? Як працює та для чого потрібен GC?

Garbage Collector (збирач сміття) у Ruby — це автоматизований механізм управління пам'яттю, який відповідає за моніторинг та звільнення пам'яті, яка більше не використовується програмою. GС робить так, щоб пам'ять, яка була виділена для об'єктів, що вже не потрібні програмі, могла бути повторно використана, тим самим оптимізуючи ресурси системи.
Просто уявіть, що в пам'яті залишаються об'єкти які непотрібні. Їх кількість постійно зростає. Виникає memory leak. Сервер може перестати відповідати, а в випадку скейленгу - ваші рахунки будуть тільки збільшуватись. Тож GC потрібен для ефективного використання RAM.
Garbage Collector у Ruby працює за принципом "mark-and-sweep". Збирач сміття проходить через всі об'єкти, до яких можна дістатися з кореневих об'єктів (наприклад, локальні змінні і глобальні змінні), і маркує (mark) їх як "доступні". Після завершення процесу маркування, збирач переходить до фази прибирання (sweep / підмітання), де він звільняє пам'ять від усіх об'єктів, які не були позначені. Ці об'єкти вважаються "недосяжними" і їх пам'ять (пам'ять яку вони раніше займали) може бути повторно використана.
Ruby також використовує поняття поколінь (Generational Garbage Collection або GGC), яке включає розділення об'єктів на покоління за частотою їх використання, дозволяючи більш ефективно управляти пам'яттю, зосереджуючи зусилля збирача сміття на молодших, більш динамічних об'єктах, які частіше змінюються.
Про GC зазвичай починають розмовляти по факту появи Memory Leak (витік пам'яті RAM) на сервері. Звісно, перезавантаження сервера допоможе на деякий час (RAM очиститься й почне набиватись знову), але все одно з цим треба буде розбиратись.
15.04.2024 18:11

Що таке HTTP Client hints (Підказки клієнта)?

meme code
meme code@memecode
18.04.2024 05:27

Фіксимо ActiveRecord::ProtectedEnvironmentError у локальному середовищі

meme code
meme code@memecode
18.04.2024 06:06

Розбираємо помилку PG::ObjectInUse (Ruby on Rails)

meme code
meme code@memecode
27.04.2024 09:29

Що таке CC та BCC в емейлах? Для чого та як використовувати?

meme code
meme code@memecode
Що таке промпт (prompt) та промпт-інжинірінг?
03.05.2024 12:08

Що таке промпт (prompt) та промпт-інжинірінг?

meme code
meme code@memecode
ZOMBIE в Ruby. Що це таке?
03.05.2024 12:41

ZOMBIE в Ruby. Що це таке?

meme code
meme code@memecode
Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
05.05.2024 12:36

Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)

meme code
meme code@memecode
07.05.2024 07:24

Що таке нативний машинний код?

meme code
meme code@memecode
Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
08.05.2024 07:57

Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
09.05.2024 12:43

[Фікс] Rails Admin - undefined local variable or method javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Що таке технічний борг (technical debt) в IT проєктах?
13.05.2024 06:17

Що таке технічний борг (technical debt) в IT проєктах?

meme code
meme code@memecode
13.05.2024 07:11

Що означає скоуп (scope) в управлінні IT-проєктами?

meme code
meme code@memecode