如何在内存上测量ActiveRecord的大小?

时间:2014-03-13 16:44:56

标签: ruby-on-rails activerecord memory-management

某些类有一个size方法,可以在内存中返回对象的大小。例如:

1.size返回4,这意味着它需要4个字节来存储Fixnum对象(1的类)。 Bignum个对象也是如此:4294967296.size返回8.

ActiveRecord::Base似乎没有等效的方法。如果想要测量ActiveRecord占用多少内存,我该怎么办?

1 个答案:

答案 0 :(得分:2)

size方法返回数字的机器表示中的字节数。它不一定(实际上并不是)给你实际的内存使用量。虽然Fixnum确实需要4字节的内存(在MRI中,其他Ruby实现不同),但Bignum需要更多内存,因为它是一个实际的Ruby对象。

同样,实现sizeStringArrayHash方法的其他类不会返回内存使用量,但会返回它们包含的元素数(字符数) ,数组元素,键分别)。

通常,您无法确定对象在内存中占用多少内存(嗯,您可以,但它不会为您提供所需的信息)。 ActiveRecord对象引用了大量其他对象,如Hashes,Strings,Symbols,....你可能也需要计算它们,甚至可能是递归的。然后你需要处理对相同对象的引用,并在某处定义对象树的边界,直到你最终重新实现大部分垃圾收集器。

所以最后,事实证明,你实际上无法确定单个ActiveRecord对象的内存使用情况,你可能不应该这样做。有关详细信息,请参阅我在another question上的类似答案。