Объяснение трассировки выделения объектов в 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 отметил объект

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

Другие вопросы по тегам