【发布时间】:2015-05-29 10:10:23
【问题描述】:
至少比20_000_000多一点,数字的object_ids是数字的2倍+1:
1454.object_id # => 2909
在大数上调用object_id 时,不会保留此格式。理论上您可以拥有的对象数量似乎存在内置限制。我跑了:
ids = []
100_000_000.times { ids << String.new.object_id }
ids.max # => 22314984
ids.uniq.count # => 44301
因此,在 100,000,000 个字符串对象中,实际上只有大约 50,000 个是唯一的。这意味着这些对象中有 99.95% 是同一个对象。我不确定这是为什么。
【问题讨论】:
-
我认为这是受服务器内存数量的限制,但这只是我的意见。
-
刚刚运行了这个。不,它没有引发任何错误。我怀疑它是否有帮助,假设的限制可能会更高。
-
您在没有
MemoryAllocationError的情况下运行此代码? -
您可能想阅读答案given here。
-
您创建了 100000000 个字符串,但它们不是同时存在的。您的数组仅存储它们的 ID,而字符串未被引用。现在 GC 可能会收集它们,如果发生这种情况,一个新对象可以与已收集的对象具有相同的 ID,因为它的插槽是空闲的。