2017-02-16 85 views
2

我想在Rails應用程序中調試內存泄漏,我試圖通過使用ObjectSpace#trace_object_allocations來獲取現有對象的轉儲。關於Ruby ObjectSpace對象分配跟蹤的說明?

爲了讓我更好地理解輸出,我想我應該充分理解的輸出JSON線的含義是:

{ 
    "address":"0x7fb716009c20", 
    "type":"STRING", 
    "class":"0x7fb7360d40e0", 
    "embedded":true, 
    "bytesize":1, 
    "value":"f", 
    "encoding":"UTF-8", 
    "file":"/Users/songyy/.rvm/gems/ruby-2.3.1/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/quoting.rb", 
    "line":78, 
    "method":"unquoted_false", 
    "generation":93, 
    "memsize":40, 
    "flags":{ 
     "wb_protected":true, 
     "old":true, 
     "uncollectible":true, 
     "marked":true 
    } 
} 

是否有任何引用,這也解釋了項目的確切含義這個JSON對象?

特別,我很感興趣的含義:

  • 嵌入式
  • bytesize
  • 標誌
    • wb_protected
    • 無法收回
    • 標記

回答

0

類:基本上obj.class.object_id

嵌入:如果字符串/陣列中的右值符合(在x64 40個字節)

bytesize:奇數是1,預計它是RVALUE頂部所需的所有額外字節

ge neration:對象分配給的GC「generation」。物體越老,數量越小。

wb_protected:寫屏障的保護,意味着對象不能移動到老一代堆上,如果它是在年輕堆

標明:GC標記的物體

建議您通過源拓展上閱讀任何這一點。其他文件很少。