2017-02-16 9 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

внедренный: истинно, если строка/массив помещается в RValue (40 байт на x64)

bytesize: нечетное значение, равное 1, ожидало бы, что это все лишние байты, необходимые сверху RVALUE

ge nation: GC «поколение», на которое был выделен объект. Чем меньше число, тем старше объект.

wb_protected: написать барьер защищен, значит объект не может двигаться к старой генерации куче, если он находится в молодой куче

отмечено: GC отмечен объект

рекомендует прочитать через источник расширения на любое из этого. Очень мало документации.