ruby - Ruby 可以存储的对象数量是否存在理论上的限制?

标签 ruby oop object objectid

至少比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/

相关文章:

ruby-on-rails - 测试服务类 - Rails

c# - 面向对象的方法设计选项

java - 为什么以及如何在 Java 中的构造函数不初始化的情况下初始化实例变量?

ruby - 在 Ruby 中找出字符串之间的区别

ruby - 如何使用 Barby 即时创建 PNG 条形码?

ruby-on-rails - 如何使 rails 库中的日志记录像在模型和 Controller 中一样工作

javascript - 如何检查对象是否存在并具有 X 属性?

Ruby 通过 SSH 隧道 Socks5 代理 Mechanize ?

oop - 在 View 模型之间传递状态

java - 我们初始化我们的主对象,并在其构造函数中创建一个新对象。当我们销毁主要对象时,它的创建会发生什么?