如何找到ruby对象使用的内存?

San*_*kar 8 ruby memory-management

在ruby中是否有任何函数,以查找ruby对象使用的内存.
类似于C具有该sizeof()功能并且PHP具有该memory_get_usage()功能.ruby是否具有等效的功能/方法?

Tra*_*vis 8

ObjectSpace#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
Run Code Online (Sandbox Code Playgroud)


fea*_*ool 2

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

>> ObjectSpace.each_object(Object).count
=> 114629
>> ObjectSpace.each_object(Array).count
=> 10209
Run Code Online (Sandbox Code Playgroud)

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

>> Symbol.all_symbols.count
=> 17878
Run Code Online (Sandbox Code Playgroud)

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

当然,这并没有告诉您每个对象的大小,只是告诉您每个类分配了多少个。

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

  • 这是内存中对象的数量。据我了解,最初的问题是询问如何找出单个对象的内存使用情况(以字节为单位)。 (3认同)