【问题标题】:Explanation on Ruby ObjectSpace object allocation trace?Ruby ObjectSpace 对象分配跟踪的解释?
【发布时间】:2017-02-16 17:05:47
【问题描述】:

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

我特别感兴趣的是:

  • 嵌入式
  • 字节大小
  • 一代
  • 标志
    • wb_protected
    • 无法收藏
    • 标记

【问题讨论】:

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


    【解决方案1】:

    类:基本上是 obj.class.object_id

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

    bytesize:奇怪的是它是 1,希望它是 RVALUE 之上所需的所有额外字节

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

    wb_protected:写屏障保护,表示对象如果在年轻堆中,就不能移动到老年代堆

    marked:GC标记了对象

    建议您通读源代码以扩展其中的任何内容。那里的文档很少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2018-09-01
      相关资源
      最近更新 更多