gpt4 book ai didi

ruby - 为什么 `ObjectSpace.count_objects`的对象总数没有变化?

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:28 25 4
gpt4 key购买 nike

我得到了这个结果(参见 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 是否在初始化后就死掉了?

最佳答案

而是依靠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

关于ruby - 为什么 `ObjectSpace.count_objects`的对象总数没有变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50635865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com