Влияет ли закрепление объекта в LOH на производительность ГХ? - PullRequest
9 голосов
/ 19 августа 2011

Я читал, что закрепление объектов в управляемой куче влияет на производительность GC в .NET, потому что GC не может сжимать память, если есть закрепленные объекты «на пути». Но поскольку куча больших объектов все равно не сжимается, это не должно применяться к объектам в LOH. Существуют ли другие скрытые затраты на закрепление объекта, который находится в LOH? Или я могу безопасно закрепить объекты в LOH без снижения производительности ГХ?

1 Ответ

5 голосов
/ 19 августа 2011

Ну, то, что куча больших объектов (LOH) не уплотнена, не означает, что она не собрана . LOH собирается , и закрепление объекта там будет иметь разветвление для будущих распределений.

Поскольку объект закреплен, он эффективно сокращает объем доступной памятив LOH (так же, как если бы вы держали ссылку).Когда делается другой запрос на выделение большого объекта, если в LOH слишком много закрепленных / удержанных ссылок, вы можете столкнуться с проблемами, выделяющими более крупные объекты.

Когда отметка выполняется во время пометки и-снижая часть сборки мусора, CLR, вероятно, помечает все ссылки, которые закреплены как корни, поэтому, вероятно, не будет никакого воздействия во время этой части сборки;он будет вести себя так же, если кто-то сохранит ссылку на большой объект.

Поскольку освобождение происходит в LOH таким же образом (блок просто помечается как доступный), эта операция также не затрагивается.

И, наконец, поскольку LOH не уплотняется, эта операция никогда не выполняется в этой куче во время GC, поэтому здесь это не затрагивается.

В целом, распределение в LOH может определенно будет подвержен влиянию закрепления ссылок на объекты в LOH, в то время как коллекции в LOH, скорее всего, нет.

Хотя давайте не будем забывать, что выделение и хранение больших блоков памяти может иметь последствия длясистемы в целом, эти комментарии строго о LOH .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...