9

ruby 中是否有任何函数来查找 ruby​​ 对象使用的内存。
类似于 C 有sizeof()函数,PHP 有memory_get_usage()函数。ruby 有等效的功能/方法吗?

4

2 回答 2

5

ObjetSpace#memsize_of 来自 Ruby 文档:

返回 obj 的消耗内存大小。

[1] pry(main)> require 'objspace'
=> true
[2] pry(main)> ObjectSpace.memsize_of('')
=> 40
[3] pry(main)> ObjectSpace.memsize_of([])
=> 40
[4] pry(main)> ObjectSpace.memsize_of(1..100)
=> 40
[5] pry(main)> ObjectSpace.memsize_of('X' * 100)
=> 141
[6] pry(main)> ObjectSpace.memsize_of(('X' * 100).chars)
=> 840
于 2020-11-24T01:35:42.100 回答
2

这是一个延伸,但如果您的目标是查找内存泄漏,而不是查看单个对象的大小,您可以查看object_count(cls),如下所示:

>> ObjectSpace.each_object(Object).count
=> 114629
>> ObjectSpace.each_object(Array).count
=> 10209

等等 FWIW,符号有点不同:您可以通过以下方式获取符号数:

>> Symbol.all_symbols.count
=> 17878

要确定是否存在 not 泄漏,可以手动调用 GC,计数对象,运行代码一段时间,再次调用 GC,然后查看对象计数是否显着增加。

当然,这并不能告诉你每个对象的大小,只是每个类分配了多少。

还有memprof,但我承认我还没有使用过。

于 2014-02-14T20:29:16.763 回答