关于Ruby ObjectSpace对象分配跟踪的说明?

时间:2017-02-16 17:05:47

标签: ruby-on-rails ruby memory memory-leaks objectspace

我尝试在Rails应用程序中调试内存泄漏,并尝试使用ObjectSpace#trace_object_allocations尝试转储现有对象。

为了让我更好地理解输出,我想我应该完全理解输出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
    • 无法收回
    • 标记

1 个答案:

答案 0 :(得分:1)

类:基本上是obj.class.object_id

embedded:如果字符串/数组适合RVALUE(x64上的40个字节)

,则为true

bytesize:奇数是1,会期望它是RVALUE顶部所需的所有额外字节

生成:对象分配的GC“生成”。对象越旧,数字越小。

wb_protected:写屏障保护,意味着对象无法移动到旧代堆,如果它在年轻堆中

标记:GC标记了对象

建议您阅读源代码以扩展其中的任何内容。很少有文件记录。