ruby 中是否有任何函数来查找 ruby 对象使用的内存。
类似于 C 有sizeof()
函数,PHP 有memory_get_usage()
函数。ruby 有等效的功能/方法吗?
问问题
4739 次
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 回答