关于Ruby ObjectSpace对象分配跟踪的解释

4

我正在尝试调试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对象中各项的确切含义?

特别是我对以下内容感兴趣:

  • class(类)
  • embedded(嵌入式)
  • bytesize(字节大小)
  • generation(代数)
  • flags(标记)
    • wb_protected(写保护)
    • old(旧)
    • uncollectible(不可回收)
    • marked(已标记)
1个回答

2

类:基本上是 obj.class.object_id

嵌入式:如果字符串/数组适合于RVALUE(在x64上为40字节),则为true

字节数:奇怪的是它是1,期望它是除了RVALUE之外所需的所有额外字节

代:对象分配时的GC“代”。数字越小,对象越老。

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

标记:GC标记了该对象

建议您阅读源代码以扩展任何内容。几乎没有文档可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接