Що таке 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 очиститься й почне набиватись знову), але все одно з цим треба буде розбиратись.
🤖 Категорії підібрані ШІ: ТехнологіїПрограмне забезпечення

🔗 Цитувати допис: "Що таке Garbage Collector у Ruby? Як працює та для чого потрібен GC?"

Якщо ви хочете процитувати цей допис у своїй роботі, статті, блозі, використовуйте наведену нижче інформацію.

Розгорнути деталі


🙌 Підтримати блог @memecode

Ви можете поширити цей допис у соцмережах, чим допоможете платформі цейво розвиватись (* ^ ω ^)

📝 Більше публікацій:
Обкладинка нотатки: Що таке промпт (prompt) та промпт-інжинірінг?
Обкладинка нотатки: ZOMBIE в Ruby. Що це таке?
Обкладинка нотатки: Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
Обкладинка нотатки: Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
Обкладинка нотатки: Що таке технічний борг (technical debt) в IT проєктах?
Дисклеймер

Інформація на сайті tseivo.com є суб'єктивною та відображає особисті погляди та досвід авторів та авторок блогів.

Використовуйте цей ресурс як одне з декількох джерел інформації під час своїх досліджень та прийняття рішень. Завжди застосовуйте критичне мислення. Людина сама несе відповідальність за свої рішення та дії.