至少比20_000_000
多一点,数字的object_id
是数字的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% 是同一个对象。我不确定这是为什么。
最佳答案
对象 ID 的分配方式取决于具体实现。在 C-ruby 上,对象 id 只是对象内存地址的数值(除了一些立即值的异常(exception),例如 true、false、nil、Fixnums)。
因此,两个事件对象不能共享相同的对象 ID(很好!),但是如果您触发垃圾回收,则某些内存位置(即堆槽)可能会被重用,因此对象 ID 也会被重用。
另一个结果是你永远不会用完对象 ID(除非你用完了进程的地址空间,但如果发生这种情况你就有麻烦了)
关于ruby - Ruby 可以存储的对象数量是否存在理论上的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260748/