2012-12-10 21 views
7

Yakut nesnenin kullandığı belleği bulmak için yakutta herhangi bir işlev var mı?
C, sizeof() işlevine ve PHP'nin memory_get_usage() işlevine sahiptir. Ruby'nin eşdeğer bir işlevi/yöntemi var mı?Ruby nesne tarafından kullanılan bellek nasıl bulunur?

+4

Muhtemelen bir kopya: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – Matt

+0

@Matt - Teşekkürler. –

+1

Merak ediyorum: sorunuzun amacı nedir? Bir nesnenin boyutunu bilmek mi istiyorsunuz, yoksa çok sayıda nesnenin ne kadar hafızaya sahip olduğunu anlamaya çalışıyor musunuz? – Sim

cevap

2

Bu streç, ama amacınız bir bellek sızıntısı aramak yerine bireysel nesnelerin boyutunu görmek ise, olduğu gibi object_count(cls) de görünebilir:

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

vb FWIW, semboller biraz farklıdır: Eğer aracılığıyla sembollerin sayısı elde edebilir:

>> Symbol.all_symbols.count 
=> 17878 

değil bir sızıntı olup olmadığını öğrenmek için, el, GC çağrı nesnelerinizi saymak, bir süre kodunuzu çalıştırabilir, GC'yi tekrar arayın, sonra herhangi bir nesne sayısının önemli ölçüde büyüdüğünü görün.

Elbette, bu, her bir nesnenin büyüklüğünü, her bir nesnenin boyutunun ne olduğunu belirtmez.

Ayrıca memprof da var, ama bunu henüz kullanmadığımı itiraf ediyorum.

+0

Bu, bellekteki nesnelerin sayısıdır. Orijinal soru, anladığım kadarıyla, tek bir nesnenin bellek kullanımını (bayt cinsinden) nasıl bulacağımı soruyor. – Ariejan

+0

@Ariejan: Tamamen katılıyorum. Bu yüzden dedim ki: "eğer hedefiniz, bir nesnenin boyutunu görmek yerine bir bellek sızıntısı aramaksa ..." –

İlgili konular