Ric*_*ton 2 ruby oop object objectid
至少到多一点20_000_000,该object_id号码s为2倍的数目+ 1:
1454.object_id # => 2909
Run Code Online (Sandbox Code Playgroud)
当调用object_id大号时,不保留此格式.似乎理论上可以有对象数量的内置限制.我跑了:
ids = []
100_000_000.times { ids << String.new.object_id }
ids.max # => 22314984
ids.uniq.count # => 44301
Run Code Online (Sandbox Code Playgroud)
因此,在100,000,000个字符串对象中,只有大约50,000个字符串实际上是唯一的.这意味着99.95%的这些对象是同一个对象.我不确定为什么会这样.
如何分配对象ID取决于实现.在C-ruby上,对象id只是对象内存地址的数值(对于立即值有一些例外,例如true,false,nil,Fixnums).
因此,两个活动对象不能共享相同的对象ID(好!),但是如果触发垃圾收集,则可以重用一些内存位置(即堆槽),因此也可以使用对象ID.
另一个结果是你永远不会用完对象id(除非你耗尽了进程的地址空间,但是如果发生这种情况你仍然会遇到麻烦)