Информация об изменениях

Сообщение Re[3]: dotMemory недосягаемые объекты от 08.12.2019 11:19

Изменено 08.12.2019 11:35 WW898

Re[3]: dotMemory недосягаемые объекты
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, WW898, Вы писали:


WW>>Здравствуйте, _NN_, Вы писали:


_NN>>>Оказалось что dotMemory в отличии от .NET Memory Profiler не умеет показывать недосягаемые объекты из дампа.

_NN>>>Это планируется реализовать в будущем ?

WW>>А вы с какой целью недосягаемые объекты хотите? Какую проблему оно поможет решить?


_NN>Есть дамп на 2Гб, с помощью .NET Memory Profiler легко нашли какие объекты не убрались и решили проблему.

_NN>С dotMemory этого не видно.

Давайте для начала с терминологией определимся: недосягаемый/недостежимый объект — это объект в графе в который нет пути из какого-либо рута.

Другими словами это и есть тот самый мусор который и должен находить и репортить алгоритм сбора мусора. Но есть одно но, алгорим работает от обратного: находит все выжившие объекты, а остальные регионы (не объекты!!!) памяти в хипе считаются мусором. В этих регионах нет информации о начале объектов, их количестве, просто диапазоны памяти, где ничего теперь нет.

Дальше можно сделать 3 вещи с этими регионами:
  • Забить до следующего GC (быстро и эффективно).
  • Скомпактить (дорого и сердито). Тут тоже есть 2 варианта: сжимать и копировать
  • Использовать маленькие регионы для точечного выделения в них новых объектов (магия оптимизации)

Собственно размеры хиров, где содержатся managed обекты при этом не менются.

Теперь по вашему вопросу. Не могли бы Вы, коротенько, в паре абзацах, объяснить что именно Вы имели в виду?
Re[3]: dotMemory недосягаемые объекты
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, WW898, Вы писали:


WW>>Здравствуйте, _NN_, Вы писали:


_NN>>>Оказалось что dotMemory в отличии от .NET Memory Profiler не умеет показывать недосягаемые объекты из дампа.

_NN>>>Это планируется реализовать в будущем ?

WW>>А вы с какой целью недосягаемые объекты хотите? Какую проблему оно поможет решить?


_NN>Есть дамп на 2Гб, с помощью .NET Memory Profiler легко нашли какие объекты не убрались и решили проблему.

_NN>С dotMemory этого не видно.

Давайте для начала с терминологией определимся: недосягаемый/недостижимый объект — это объект в графе в который нет пути из какого-либо рута.

Другими словами это и есть тот самый мусор который и должен находить и репортить алгоритм сбора мусора. Но есть одно но, алгорим работает от обратного: находит все выжившие объекты, а остальные регионы (не объекты!!!) памяти в хипе считаются мусором. В этих регионах нет информации о начале объектов, их количестве, просто диапазоны памяти, где ничего теперь нет.

Дальше можно сделать 3 вещи с этими регионами:
  • Забить до следующего GC (быстро и эффективно).
  • Скомпактить (дорого и сердито). Тут тоже есть 2 варианта: сжимать и копировать
  • Использовать маленькие регионы для точечного выделения в них новых объектов (магия оптимизации)

Собственно размеры хиров, где содержатся managed обекты при этом не менются.

Теперь по вашему вопросу. Не могли бы Вы, коротенько, в паре абзацах, объяснить что именно Вы имели в виду?