Pull to refresh

Comments 20

Статья конечно хорошая, но не рассказывает ничего нового, чего не было бы в других подобных. Но для новичков да, пусть лучше будет, а вот для тех кто заинтересовался и хочет глубже, лучше читать Pro .Net Memory Management от Konrad Kokosa и\или посмотреть доклады с CLRium о работе GC (есть в свободном доступе на ТыТруба)

Согласен, статья исключительно для новичков. Мне она показалась довольно простой для восприятия, потому и решил перевести.

Есть еще прекрасная книга "Writing High-Performance .NET Code" by Ben Watson. Там довольно подробно расписана утилизация памяти, методы и средства диагностики проблем с памятью (и не только). Вроде как даже перевод на русский имеется.

Хорошая статья, только можно добавить почему именно поколений 3 и стадии сборки мусора. Но ещё может невнимательно читал, но не увидел, что в LOH объекты не сдвигаются.

Про то, что в LOH объекты не сдвигаются, тут есть. Про поколения и причину их разделения тоже есть, просто нет про то, что их именно 3. Но это перевод, так что даже не знаю, насколько этично будет что-то добавлять от себя.

А кстати, почему поколений именно 3?

Не отвечу на вопрос, но вообще например в Mono поколений 2. Думаю, что в дотнете просто решили, что два - маловато, а четыре уже не надо.)

Ну просто предыдущий комментатор советовал написать в статье, почему поколений именно 3, вот я и спросил. Потому что я, например, не знаю. И в Гугле с наскока не нашел.

Рихтер пишет, что так решили на основании огромного эмпирического опыта. Ну т. е. методом подбора.

Про то, что в LOH объекты не сдвигаются, тут есть.

Про LOH информация устарела. GC умеет "дефрагметировать" LOH. https://docs.microsoft.com/en-us/dotnet/api/system.runtime.gcsettings.largeobjectheapcompactionmode?view=net-6.0#System_Runtime_GCSettings_LargeObjectHeapCompactionMode

Да, в следующей статье об этом написано.

Писал комментарий, когда не было такого. Такое есть, но дефрагментация, на сколько я понимаю, происходит редко.

Ее надо специально включать, насколько я понимаю.

Да, там ещё можно руками вызвать

Лучше поздно, чем никогда)))) есть статья от Microsoft, где описывается почему именно 3 поколения, почему не меньше и не больше. В целом вся суть сводится к тому, что изначально планировалось использовать 2 поколения, но потом стало понятно, что слишком много "старых" объектов и решили ввести промежуточное поколение.

А есть ссылка? Я не находил.

Да, к сожалению, тоже не могу с наскока найти, но, если не изменяет память, был перевод на хабре, что-то вроде рассуждения на эту тему, там автор проводил анализ алгоритма сборки. Не нашёл, каюсь)

Спасибо!

Скорее всего, это она, хоть про мотивацию и написано всего пара строк:

The reason for having three generations is that, in a well-tuned app,
most objects die in gen0. For example, in a server app, the allocations
associated with each request should die after the request is finished.
The in-flight allocation requests will make it into gen1 and die there.
Essentially, gen1 acts as a buffer between young object areas and
long-lived object areas.

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

Описание параллельного и непараллельного режима мутновато в переводе получилось. В английском варианте все понятно.

В оригинале сказано что серверный и десктопный это просто альтернативные названия параллельного и непаралельного. А в переводе говорится про "подрежимы". Непорядок.

Да, этот момент мне пришлось подредактировать, чтобы не вводить людей в заблуждение. На самом деле, параллельный и непараллельный режимы и десктопный и серверный режимы - это не два режима с разными названиями, а два режима (рабочей станции и серверный) и два подрежима - параллельный и непараллельный (то есть всего 4 комбинации, а не две). Так что там получилась небольшая смесь переводимой статьи и описания из Рихтера.

Sign up to leave a comment.

Articles