Объяснение трассировки выделения объектов в Ruby 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 ответ
Класс: в основном obj.class.object_id
встроенный: истина, если строка / массив соответствует RVALUE (40 байт на x64)
bytesize: странно, что это 1, ожидалось бы, что это будут все дополнительные байты, требуемые поверх RVALUE
поколение: GC "поколение", в котором объект был выделен. Чем меньше число, тем старше объект.
wb_protected: защищенный от записи барьер означает, что объект не может быть перемещен в кучу старого поколения, если он находится в молодой куче
отмечен: GC отметил объект
Рекомендую вам прочитать источник, чтобы узнать больше об этом. Очень мало документации.