Предположим, что существует простой объект:
object = Object.new
Как я знаю, это создает Object в памяти (RAM).
Есть ли способ удалить этот объект из ОЗУ?
Предположим, что существует простой объект:
object = Object.new
Как я знаю, это создает Object в памяти (RAM).
Есть ли способ удалить этот объект из ОЗУ?
Кроме взлома базового кода C, нет. Сбор мусора управляется временем выполнения, поэтому вам не нужно беспокоиться об этом. Вот достойная ссылка по алгоритму в Ruby 2.0.
Как только у вас больше нет ссылок на объект в памяти, сборщик мусора пойдет на работу. Вы должны быть в порядке.
Простой ответ: пусть GC выполняет свою работу.
Когда вы будете готовы избавиться от этой ссылки, просто object = nil
. И не ссылайтесь на object
.
Сборщик мусора в конечном итоге соберет его и очистит ссылку.
(from ruby site)
=== Implementation from GC
------------------------------------------------------------------------------
GC.start -> nil
GC.start(full_mark: true, immediate_sweep: true) -> nil
------------------------------------------------------------------------------
Initiates garbage collection, unless manually disabled.
This method is defined with keyword arguments that default to true:
def GC.start(full_mark: true, immediate_sweep: true); end
Use full_mark: false to perform a minor GC. Use immediate_sweep: false to
defer sweeping (use lazy sweep).
Note: These keyword arguments are implementation and version dependent. They
are not guaranteed to be future-compatible, and may be ignored if the
underlying implementation does not support them.
По большей части Ruby автоматически обрабатывает сборку мусора. Конечно, есть некоторые краевые случаи, но в общем случае вам никогда не придется беспокоиться о сборке мусора в типичном приложении Ruby.
Детали реализации сборки мусора варьируются в разных версиях Ruby, но в нем очень мало ручек для поворота, и для большинства целей они вам не нужны. Если вы окажетесь под давлением памяти, вы можете переоценить свои проектные решения, а не пытаться управлять симптомом избыточного потребления памяти.
В общих чертах, Ruby отмечает объекты для сбора мусора, когда они выходят из сферы действия или больше не ссылаются. Однако некоторые объекты, такие как Symbols, никогда не собираются и сохраняются на протяжении всего времени выполнения вашей программы.
Вы можете вручную запускать сборку мусора с помощью GС# start, но не могут действительно освобождать блоки памяти так, как вы можете, с помощью программ C от в Ruby. Если вам нужно это сделать, вы можете решить основную проблему X/Y, а не пытаться напрямую управлять памятью.
Вы не можете явно уничтожить объект. Ruby имеет автоматическое управление памятью. Объекты, которые больше не ссылаются нигде, автоматически собираются сборщиком мусора, встроенным в интерпретатор.
Хорошая статья, чтобы прочитать о том, как правильно распределить выделение, и несколько инструментов, которые вы можете использовать для тонкой настройки.
http://merbist.com/2010/07/29/object-allocation-why-you-should-care/