一些类有一个 size
方法,它返回对象在内存上的大小。例如:1.size
返回 4,这意味着它需要 4 个字节来存储 Fixnum 对象( 1
的类)。 Bignum
对象也是如此:4294967296.size
返回 8。ActiveRecord::Base
似乎没有等效的方法。如果想测量我的 ActiveRecord
占用多少内存,我该怎么办?
最佳答案
size
方法返回数字的机器表示中的字节数。它不一定(实际上也不会)为您提供实际的内存使用情况。虽然 Fixnum 确实需要 4 字节的内存(在 MRI 中,其他 Ruby 实现有所不同),但 Bignum 需要更多内存,因为它是一个实际的 Ruby 对象。
类似地,实现 size
方法的其他类,如 String
、 Array
或 Hash
不会返回内存使用情况,而是它们包含的元素数量(分别为字符、数组元素、键)。
通常,您无法真正确定对象在内存中占用多少内存(好吧,您可以,但它不会为您提供所需的信息)。 ActiveRecord 对象引用了大量其他对象,如哈希、字符串、符号等。您可能也需要对它们进行计数,甚至可能是递归的。然后您需要以某种方式处理对相同对象的引用,并在某处定义对象树的边界,直到您最终重新实现大部分垃圾收集器。
所以最后,事实证明,您实际上无法确定单个 ActiveRecord 对象的内存使用情况,而且您可能不应该这样做。有关更多详细信息,另请参阅我在 another question 上的类似答案。
关于ruby-on-rails - 如何在内存上测量 ActiveRecord 的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22385345/