Почему общее количество объектов в ObjectSpace.count_objects не изменяется? - PullRequest
0 голосов
/ 01 июня 2018

Я получаю этот результат (ср. https://ruby -doc.org / core-2.5.1 / ObjectSpace.html # method-c-count_objects ):

total = ObjectSpace.count_objects[:TOTAL]
new_object = "tonytonyjan"
ObjectSpace.count_objects[:TOTAL] - total  # => 0

total = ObjectSpace.count_objects[:T_STRING]
new_object = "tonytonyjan"
ObjectSpace.count_objects[:T_STRING] - total  # => 0

Пожалуйста, объясните, почему результат равен нулю.new_object умер сразу после инициализации?

1 Ответ

0 голосов
/ 01 июня 2018

Скорее полагайтесь на each_object, чтобы дать статус о живых объектах:

def foo
  total = ObjectSpace.each_object(String).count
  str = "kiddorails"
  puts ObjectSpace.each_object(String).count - total
end

foo
#=> 1

Еще один момент, на который следует обратить внимание: приведенный выше фрагмент кода не является полностью защищенным для предоставления подробных сведений об увеличенных объектах String, поскольку GCвключить и может пнуть в любое время.Я бы предпочел это:

def foo
  GC.enable # enables GC if not enabled
  GC.start(full_mark: true, immediate_sweep: true, immediate_mark: false) # perform GC if required on current object space
  GC.disable # disable GC to get the right facts below
  total = ObjectSpace.each_object(String).count
  100.times { "kiddorails" }
  puts ObjectSpace.each_object(String).count - total
end
foo #=> 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...