Сборка "мусора" Объекта класса Ruby

В рубине все классы являются объектами класса Класс. Так как классы являются также объектами, VM Ruby следуют той же стратегии Сборки "мусора" объектов класса? Что решает, что объект класса безопасен для сборки "мусора"?

23
задан Nakilon 4 September 2017 в 02:23
поделиться

3 ответа

Когда с объектом ничего не связано, от него можно безопасно избавиться. Что касается запуска сборки мусора, это мне неизвестно.

0
ответ дан 29 November 2019 в 03:07
поделиться

Я понятия не имею, что такое ответ, но не могли бы вы выяснить с помощью экспериментов? Посмотрите на подборщик . Я уверен, что это очень наивный тест, и кто-то может сделать лучше, но вы получаете идею:

puts "program start"    
include ObjectSpace

class SfbdTest
   def initialize(a)
      @a = a
   end
end
define_finalizer(SfbdTest, proc{|id| puts "GC on class"} )

puts "creating instance"
x = SfbdTest.new(1)
define_finalizer(x, proc{|id| puts "GC on instance"} )

puts "zombie-ing instance"
x = nil

puts "forcing GC"
GC.start()

puts "program end"

Производит:

sfbd@thing:~$ ruby -w test.rb
program start
creating instance
zombie-ing instance
forcing GC
program end
GC on instance
GC on class
sfbd@thing:~$ 

Похоже, это нуждается в нитке, но, к сожалению, я должен работать, извините...

0
ответ дан 29 November 2019 в 03:07
поделиться

Я проверил это, ответ - похоже, что это так.

irb(main):001:0> x = [] #Memory Usage = 12MB
=> []
irb(main):002:0> 120000.times {x << Class.new} #Memory usage now at 41 MB
=> 120000
irb(main):013:0> x = []
=> []
irb(main):011:0> GC.start() #Memory usage now at 13MB
=> nil
1
ответ дан 29 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

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