Ruby Memory Validator sẽ có thể để kéo nó ra nhưng nó không miễn phí.
Aman Gupta
patched Joe Damatos
memprof nhưng có vẻ như là
work in progress và tôi chưa bao giờ chạy nó trên máy tính của mình. Joe có một số bài đăng hay về memprof và các nội dung cấp thấp khác trên số
blog của anh ấy.
Bây giờ tôi không chắc là họ thực sự có thể. Số nguyên được lưu trữ dưới dạng Fixnum
và Fixnum
không phải là đối tượng Ruby thông thường, nó chỉ trông như vậy. Ruby sử dụng một mẹo tăng tốc thông minh với các đối tượng object_id
để làm cho các đối tượng chiếm ưu thế. Số thực tế được lưu trữ trong chính số object_id
. Đó là lý do tại sao hai Fixnum khác nhau chứa cùng một giá trị có cùng số object_id
.
>> x=5
=> 5
>> y=5
=> 5
>> x.object_id
=> 11
>> y.object_id
=> 11
>> z=4711
=> 4711
>> z.object_id
=> 9423
Các object_id
của một Fixnum
là thực sự được tạo ra bởi chút chuyển sang bên trái và sau đó thiết lập các bit ít quan trọng.
5
là 0b101
và object_id
cho 5
là 11
và 11
trong hệ nhị phân là 0b1011
.
4711
là 0b0001001001100111
, chuyển trái và thiết lập các bit và bạn nhận 0b0010010011001111
và đó là 9423 mà sẽ xảy ra là object_id
cho z
trên.
This behaviour có lẽ là triển khai cụ thể nhưng tôi không biết về triển khai Ruby không xử lý Fixnum theo cách này.
Có ít nhất ba đối tượng trực tiếp khác trong Ruby và đó là false
, true
và nil
.
>> false.object_id
=> 0
>> true.object_id
=> 2
>> nil.object_id
=> 4
Nguồn
2010-03-08 15:37:24
Tại sao? Bạn đang cố làm gì vậy? – SLaks