Що таке 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 очиститься й почне набиватись знову), але все одно з цим треба буде розбиратись.
Цейво!Відреагуй!
🧵

Цей допис поки що не має жодних доповнень від автора/ки.

29 груд. '23, 10:37

Що таке Chat GPT? Для чого потрібен та як працює?

meme code
14 квіт. '24, 09:14

Accept - HTTP заголовок, для чого потрібен та як працює?

meme code
Що таке .gitignore? Для чого потрібен та як використовувати
2 серп. '24, 14:58

Що таке .gitignore? Для чого потрібен та як використовувати

meme code
23 трав. '23, 07:41

Що таке attr_accessor, attr_reader та attr_writer у Ruby? Для чого вони потрібні?

meme code
24 трав. '23, 18:53

Що таке joins у Ruby on Rails та як це працює?

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

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

meme code
ZOMBIE в Ruby. Що це таке?
3 трав. '24, 12:41

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

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

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

meme code
7 трав. '24, 07:24

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

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

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

meme code
9 трав. '24, 12:43

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

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

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

meme code
27 квіт. '24, 09:29

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

meme code
13 трав. '24, 07:11

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

meme code
18 квіт. '24, 06:06

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

meme code
18 квіт. '24, 05:27

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

meme code
15 квіт. '24, 18:11

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

meme code