首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么按`ObjectSpace.count_objects`计算的对象总数没有变化?

为什么按`ObjectSpace.count_objects`计算的对象总数没有变化?
EN

Stack Overflow用户
提问于 2018-06-01 11:53:04
回答 1查看 121关注 0票数 3

我得到这个结果(请参阅https://ruby-doc.org/core-2.5.1/ObjectSpace.html#method-c-count_objects):

代码语言:javascript
复制
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是不是在初始化之后就死了?

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 14:34:22

而是依靠each_object提供有关活动对象的状态:

代码语言:javascript
复制
def foo
  total = ObjectSpace.each_object(String).count
  str = "kiddorails"
  puts ObjectSpace.each_object(String).count - total
end

foo
#=> 1

另一件需要注意的事情是:上面的代码片段不能提供关于增量字符串对象的详细信息,因为GC是启用的,并且可以随时启用。我更喜欢这样:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50635865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档