🇺🇦Допомогти Україні

Що таке 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 квіт., 18:11

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

meme code
meme code@memecode
18 квіт., 05:27

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

meme code
meme code@memecode
18 квіт., 06:06

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

meme code
meme code@memecode
27 квіт., 09:29

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

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

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

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

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

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

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

meme code
meme code@memecode
07 трав., 07:24

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

meme code
meme code@memecode
Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
08 трав., 07:57

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

meme code
meme code@memecode
09 трав., 12:43

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

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

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

meme code
meme code@memecode
13 трав., 07:11

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

meme code
meme code@memecode