Ruby可以存储的对象数量在理论上有限制吗



至少比20_000_000多一点,object_id的数字是数字+1:的2倍

1454.object_id # => 2909

在大号码上调用object_id时,不保留此格式。理论上你可以拥有的物体数量似乎有一个内在的限制。我跑了:

ids = []
100_000_000.times { ids << String.new.object_id }
ids.max # => 22314984
ids.uniq.count # => 44301

因此,在100000000个字符串对象中,实际上只有大约50000个是唯一的。这意味着99.95%的物体是同一物体。我不知道为什么会这样。

如何分配对象id取决于实现。在C子系统上,对象id只是对象的内存地址的数值(一些立即值除外,如true、false、nil、Fixnums)。

因此,两个活动对象不能共享相同的对象id(好!),但是,如果触发垃圾回收,则一些内存位置(即堆槽)可能会被重用,因此对象id也会被重用。

另一个后果是,您永远不会用完对象id(除非您耗尽了进程的地址空间,但如果发生这种情况,您无论如何都会遇到麻烦)

相关内容

  • 没有找到相关文章

最新更新