某些类有一个size
方法,可以在内存中返回对象的大小。例如:
1.size
返回4,这意味着它需要4个字节来存储Fixnum对象(1
的类)。 Bignum
个对象也是如此:4294967296.size
返回8.
ActiveRecord::Base
似乎没有等效的方法。如果想要测量ActiveRecord
占用多少内存,我该怎么办?
答案 0 :(得分:2)
size
方法返回数字的机器表示中的字节数。它不一定(实际上并不是)给你实际的内存使用量。虽然Fixnum确实需要4字节的内存(在MRI中,其他Ruby实现不同),但Bignum需要更多内存,因为它是一个实际的Ruby对象。
同样,实现size
,String
或Array
等Hash
方法的其他类不会返回内存使用量,但会返回它们包含的元素数(字符数) ,数组元素,键分别)。
通常,您无法确定对象在内存中占用多少内存(嗯,您可以,但它不会为您提供所需的信息)。 ActiveRecord对象引用了大量其他对象,如Hashes,Strings,Symbols,....你可能也需要计算它们,甚至可能是递归的。然后你需要处理对相同对象的引用,并在某处定义对象树的边界,直到你最终重新实现大部分垃圾收集器。
所以最后,事实证明,你实际上无法确定单个ActiveRecord对象的内存使用情况,你可能不应该这样做。有关详细信息,请参阅我在another question上的类似答案。