在 Mike HR 和 Stefan 对我的一个问题发表评论后,我注意到ObjectSpace.each_object(String)
其中几乎包括我能想到的任何字符串:
strings = ObjectSpace.each_object(String)
strings.include?("some random string") # => true
或者
strings = ObjectSpace.each_object(String).to_a
strings.include?("some random string") # => true
我认为strings
应该只包括当时存在的字符串。为什么它包含几乎任何字符串?
然而,当我计算 的长度时strings
,它返回一个有限数:
ObjectSpace.each_object(String).to_a.length # => 15780
这在 Ruby 2.1.2p95(2014-05-08 修订版 45877)[x86_64-linux] 解释器和 irb 上观察到。
这与 Ruby 2.1 中引入的冻结字符串文字优化有什么关系?