Ruby / сборка "мусора" направляющих

Хотя преобразование ArrayList к HashSet эффективно удаляет дубликаты, если необходимо сохранить порядок вставки, я предложил бы, чтобы Вы использовали этот вариант

// list is some List of Strings
Set<String> s = new LinkedHashSet<>(list);

Затем если необходимо возвратиться List ссылка, можно использовать снова конструктора преобразования.

7
задан Andrew Grimm 23 June 2012 в 11:19
поделиться

2 ответа

Простой ответ: среда выполнения Ruby имеет сборщик мусора. В зависимости от среды выполнения (сборщик мусора поколений JRuby / JVM, сборщик мусора IronRuby / CLR, классический сборщик мусора Ruby / mark-sweep) используются разные алгоритмы. Но основы довольно просты:

  • При запросе на выделение, если имеется «недостаточно свободной памяти» - насколько недостаточно - это один из ингредиентов алгоритма GC - тогда GC начнется.
  • GC начинается с сканирование корней , которые являются глобальными переменными и местоположениями стека (параметры и локальные переменные), чтобы обнаружить, какие объекты все еще живы; он отмечает каждый найденный объект
  • Затем процесс сборки мусора смотрит на ссылки (ссылки) внутри этих объектов и рекурсивно переходит к тем объектам, которые не содержат '
12
ответ дан 6 December 2019 в 11:51
поделиться

Если вас это интересует, вам следует ознакомиться с серией блогов о сборке мусора с копированием при записи, созданной командой Phusion, и их усилиях по улучшению схемы ruby ​​gc по умолчанию в Ruby Enterprise Edition. .

http://izumi.plan99.net/blog/index.php/2007/04/05/saving-memory-in-ruby-on-rails/

Другие ссылки этой серии здесь:

http://www.rubyenterpriseedition.com/faq.html

5
ответ дан 6 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: