Размеры объекта для сборщика мусора

Учитывает ли сборщик мусора в ruby размер и количество объектов? Для оптимизации я рассматриваю возможность замены экземпляров Class с помощью Struct s или plain Hash es. Я хотел бы понять, какие классы будут иметь наибольшее влияние на сбор мусора.

0
nl ja de
@Veger спасибо, я обновил вопрос
добавлено автор gmile, источник
Я полагаю, что «да» или «нет» - это не тот ответ, который вы ищете ... Так что же вы действительно хотите знать и почему? Пожалуйста, уточните свой вопрос, чтобы он мог правильно ответить.
добавлено автор Veger, источник
Я не думаю, что это важно. Если объект является мусором, он должен быть собран. Быть большим (или маленьким) не делает его больше (или меньше) мусором.
добавлено автор Sergio Tulentsev, источник
с точки зрения сбора мусора, я не думаю, что это важно ... но с точки зрения инстанцирования, это точно. Ответ: сравнить его. AFAIK, создавая тонны Structs быстрее, чем создание экземпляра одинакового количества полноценных классов.
добавлено автор m_x, источник

1 ответы

Парень, который сказал, что вы должны сравнить это правильно - GC - сложная проблема, и сложно дать 100% правильный ответ.

Кроме того, это зависит от используемой реализации. В JRuby это работает JVM. В МРТ это метка и развертка.

В случае MRI это работает примерно так: каждый раз, когда интерпретатору ruby требуется больше памяти, он запускает GC, чтобы попытаться освободить его. Если памяти недостаточно, она будет выделять больше. И GC решает, что объект в порядке, чтобы его освободить («отметьте» его), когда нет ссылок на него.

Единственный совет, который я могу вам дать, - избегать использования большого количества объектов, которые не могут быть собраны в мусор. Например, если вы создаете массив строк (их размер не важен), вы должны увидеть снижение производительности намного быстрее, чем если бы вы создали большую строку, объединяющую каждую из меньших.

Это связано с тем, что в последнем GC может уничтожить маленькие строки после их использования, в то время как в первом массиве всегда сохраняется ссылка на каждую из них.

EDIT: Конечно, это предполагает, что стоимость их сохранения в памяти больше, чем замедление работы с «большой струной». В некоторых случаях лучше иметь небольшие строки, а затем объединять их всех - что приводит к одной медленной операции. Опять же, это просто примеры без контрольных показателей, не воспринимайте их очень серьезно.

0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков