Re: Интервью .NET и сборщик мусора
От: Тёмчик Австралия жж
Дата: 26.11.20 10:08
Оценка: 5 (1) +1 -1 :))
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Imho на вопросы с GC мастурбируют часто те, кто алгоритмы не осилил. Реально GC могут отключать, для гарантированного отклика, на бирже, например. Т.е. память никак не освобождается, а узел периодически перезагружается. Ну и памяти туда ставят щедро.
Re: Интервью .NET и сборщик мусора
От: fmiracle  
Дата: 26.11.20 09:48
Оценка: 5 (1) +3
Здравствуйте, Glas, Вы писали:

G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Этот вопрос обычно не из-за того, что в эту работу надо вмешиваться, а для проверки насколько человек понимает работу среды, для которой пишет программу. Для младшего разработчика оно может быть и не особо важно, для старшего надо иметь уж хотя бы общее понимание.
При правильном подходе, в .net вполне можно устроить утечку памяти, когда разработчик думает, что она уже должна освободиться, а она не освобождается. Вот чтобы в подобное не вляпаться случайно и стоит иметь понимание его работы.

P.S.
Популярный вопрос про class/struct это ведь тоже на самом деле вопрос про GC (примерно все отвечают что класс-в куче, а структура — в стеке, но вот дальше, на что это повлияет-то, и вообще что есть "куча", а что "стек" отвечают уже не все, некоторые тут отвечают, что стек — это когда первым пришло, первым ушло...)
Интервью .NET и сборщик мусора
От: Glas  
Дата: 26.11.20 05:51
Оценка: :)))
Всем привет.

Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.
Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?
.net gc
Re: Интервью .NET и сборщик мусора
От: Sharowarsheg  
Дата: 26.11.20 05:58
Оценка: +3
Здравствуйте, Glas, Вы писали:

G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Очень часто, только я не вмешиваюсь в его работу, а стараюсь понимать, где я оставляю мусор и в каком поколении он будет собран. По причине того, что если за этим не смотреть, то GC занимает много времени и убивает многопоточность. Даже в новых версиях, где стало гораздо лучше, всё равно надо следить.
Re: Интервью .NET и сборщик мусора
От: HFTMan  
Дата: 28.11.20 12:34
Оценка: +3
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?
Все highload проекты(эдак десятки, если не сотни тысяч RPS), реализуемые на .NET Core-требуют глубокого понимания механизмов работы GC и умения этим пользоваться.
Re: Интервью .NET и сборщик мусора
От: Министр Промышленности СССР  
Дата: 29.11.20 19:22
Оценка: :)))
G>Всем привет.

G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

осенью 2016 на собеседованиях в СПб на вопросы по GC я отвечал,
что у сборщика мусора выявлена новая недокументированная функциональность — возможность проверять подготовленность соискателей на собеседованиях

тогда этого ответа почти хватало
сейчас я думаю дятлов на собеседующих позициях ещё прибавилось, так что придётся подробно отвечать
Отредактировано 30.11.2020 1:07 Министр Промышленности . Предыдущая версия .
Re[3]: Интервью .NET и сборщик мусора
От: Sharov Россия  
Дата: 27.11.20 16:05
Оценка: 10 (1) +1
Здравствуйте, Sinclair, Вы писали:

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

S>>А так основные сценарии это когда начинается critical path в коде, или чувствительный к latency код, когда прерывания нашего кода крайне нежелательно (stop the world), перед этими участками кода и делают gc. У Клеппмана очень круто про это написано буквально на пару страниц.
S>А можно ссылочку на Клеппмана?

У меня англ. издание, глава 8, раздел Process Pauses, стр. 295 — 299. Там вперемешку со всяким прочим. Скорее пару абзацев,
а не пару страниц. На худой край -- страница.
Кодом людям нужно помогать!
Re: Интервью .NET и сборщик мусора
От: Gradiens  
Дата: 27.11.20 06:55
Оценка: +1 :)
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

И правильно делают.
Потому что "разрабы", не понимающие работу GC ведут себя как обезъяны: едят там же где и гадят, и весь мусор бросают себе под ноги. Ну-а-чо, есть же GC, зачем думать о памяти?
В результате продуктами их жизнедеятельности должны заниматься более продвинутые коллеги. А оно им надо, быть уборщиками в зоопарке?
G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Вмешиваюсь редко, да там и возможность вмешательства весьма ограничена. Так, настроить чуток.
Но вот разгребать Авгиевы конюшни в поисках утечек — это да, бывает.
Re[3]: Интервью .NET и сборщик мусора
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.11.20 15:55
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>В случае стека очистка бесплатна, указатели bp/sp переставил и всех делов. Локальность опять же лучше, cache oblivious и т.д.

Там ещё много нюансов. Например, когда мы имеем структуру с несколькими полями, и работаем с ней локально (без передачи в/из виртуальных вызовов), то JIT вообще всё выкидывает примерно так, как если бы никакой структуры не было.
То есть ты пишешь там всякое про Point.x, Point.y, а джит всё это замапил на пару регистров (а то и вообще на один, если ты с .y не работаешь).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Интервью .NET и сборщик мусора
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.11.20 16:14
Оценка: 2 (1)
Здравствуйте, Sharov, Вы писали:
Ага, нашёл.
Я просто удивился — как так, Клеппман мало того, что в распределёнке шарит, так ещё и C#-гуру!
S>У меня англ. издание, глава 8, раздел Process Pauses, стр. 295 — 299. Там вперемешку со всяким прочим. Скорее пару абзацев,
S>а не пару страниц. На худой край -- страница.
Ну, если честно, у Клеппмана написано не просто "делайте GC перед критичным участком" — там написано

An emerging idea is to treat GC pauses like brief planned outages of a node, and to let other nodes handle requests from clients while one node is collecting its garbage.
If the runtime can warn the application that a node soon requires a GC pause, the application can stop sending new requests to that node, wait for it to finish processing outstanding requests, and then perform the GC while no requests are in progress.
This trick hides GC pauses from clients and reduces the high percentiles of response time [70, 71]. Some latency-sensitive financial trading systems [72] use this approach.

То есть надо сначала всем сказать "падажжы", потом дождаться окончания реквестов, и только потом делать GC. А потом рапортовать "я всё, засылайте запросы".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Интервью .NET и сборщик мусора
От: mrTwister Россия  
Дата: 26.11.20 09:11
Оценка: +1
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Дело не во вмешивании в GC, а в том, что у приложения могут быть нефункциональные баги, для предотвращения и исправления которых надо понимать, как работает GC
лэт ми спик фром май харт
Re[2]: Интервью .NET и сборщик мусора
От: a7d3  
Дата: 26.11.20 14:43
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Здравствуйте, Glas, Вы писали:


G>>Всем привет.


G>>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

Тё>Imho на вопросы с GC мастурбируют часто те, кто алгоритмы не осилил. Реально GC могут отключать, для гарантированного отклика, на бирже, например. Т.е. память никак не освобождается, а узел периодически перезагружается. Ну и памяти туда ставят щедро.


Кто о чём, лысые — о расчёсках, а идиоты — о вопросах про алгоритмы на собеседованиях.
Re: Интервью .NET и сборщик мусора
От: mgu  
Дата: 26.11.20 23:52
Оценка: +1
Здравствуйте, Glas, Вы писали:

G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.


Это святое. Причём нужно ответить так, как было написано в том учебнике, по которому обучался интервьюер.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?


Крайне редко, бужу его, когда нужна немедленная чистка.
Re: Интервью .NET и сборщик мусора
От: Sharov Россия  
Дата: 26.11.20 08:48
Оценка:
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

У меня инф-ия немного устаревшая, .net 3.5-4.0, но особо в работу gc вмешаться нельзя. Можно высказать свои пожелания, типа gc.collect, gc.waitforpendingfinalizers и т.д., но вот не факт, что сборка начнется тут же после этих команд. Сборщик мусора штука недетерминированная, у него свои эвристики, поэтому как будет на самом деле -. В последних версиях его сделали более ручным.

А так основные сценарии это когда начинается critical path в коде, или чувствительный к latency код, когда прерывания нашего кода крайне нежелательно (stop the world), перед этими участками кода и делают gc. У Клеппмана очень круто про это написано буквально на пару страниц.
Кодом людям нужно помогать!
Re: Интервью .NET и сборщик мусора
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.11.20 09:40
Оценка:
При работе с Com объектами их может плодиться кучи.
Конечно помогают Marshal.ReleaseComObject Marshal.FinalReleaseComObject(obj)
Но не всегда иногда приходится вызывать для полной очистки
GC.Collect();
GC.WaitForPendingFinalizers();
и солнце б утром не вставало, когда бы не было меня
Re[2]: Интервью .NET и сборщик мусора
От: Sharov Россия  
Дата: 26.11.20 11:34
Оценка:
Здравствуйте, fmiracle, Вы писали:

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



F>P.S.

F>Популярный вопрос про class/struct это ведь тоже на самом деле вопрос про GC (примерно все отвечают что класс-в куче, а структура — в стеке, но вот дальше, на что это повлияет-то, и вообще что есть "куча", а что "стек" отвечают уже не все, некоторые тут отвечают, что стек — это когда первым пришло, первым ушло...)

В случае стека очистка бесплатна, указатели bp/sp переставил и всех делов. Локальность опять же лучше, cache oblivious и т.д.
Кодом людям нужно помогать!
Re[2]: Интервью .NET и сборщик мусора
От: Glas  
Дата: 26.11.20 12:16
Оценка:
Здравствуйте, Sharov, Вы писали:

S>У меня инф-ия немного устаревшая, .net 3.5-4.0, но особо в работу gc вмешаться нельзя. Можно высказать свои пожелания, типа gc.collect, gc.waitforpendingfinalizers и т.д., но вот не факт, что сборка начнется тут же после этих команд. Сборщик мусора штука недетерминированная, у него свои эвристики, поэтому как будет на самом деле -. В последних версиях его сделали более ручным.


S>А так основные сценарии это когда начинается critical path в коде, или чувствительный к latency код, когда прерывания нашего кода крайне нежелательно (stop the world), перед этими участками кода и делают gc. У Клеппмана очень круто про это написано буквально на пару страниц.


Ну вот я из памяти извлекаю инфу, что на msdn было написано — нежелательно ничего вызывать из GC. В предыдущем комменте меня натолкнули на мысль, что погуглить. Нашел на хабре статью про оптимизацию. Теперь понятно, о чем речь может идти. https://habr.com/ru/post/452298/
Re[2]: Интервью .NET и сборщик мусора
От: #John Европа https://github.com/ichensky
Дата: 26.11.20 12:19
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Реально GC могут отключать, для гарантированного отклика, на бирже, например.


Как в .net отключить GC?
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re: Интервью .NET и сборщик мусора
От: a7d3  
Дата: 26.11.20 14:44
Оценка:
Здравствуйте, Glas, Вы писали:

G>Всем привет.


G>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?

В основном, такие вопросы призваны выявить понимает ли человек, какие есть варианты управления памятью в дотнетах.
Т.е. заход с GC всего лишь точка входа.
Re: Интервью .NET и сборщик мусора
От: __kot2  
Дата: 26.11.20 15:34
Оценка:
специфику его надо знать.
у нас например в питоне была проблема что приложение по работе зажирало через пару часов с терабайт оперативки. начали разбираться, оказалось если поменять сборщик мусора на кастомный jmalloc или как-то так, то там все оставалось в пределах гигов 20ти. то есть кто бы знал, что сборщик мусора питона 2.7 по крайней мере вообще никогда память не освобождает
Re[3]: Интервью .NET и сборщик мусора
От: Тёмчик Австралия жж
Дата: 27.11.20 04:25
Оценка:
Здравствуйте, #John, Вы писали:

Тё>>Реально GC могут отключать, для гарантированного отклика, на бирже, например.


J>Как в .net отключить GC?

Хз. В JVM можно ключиками запуска указать, какую GC использовать. Есть такая, что ничего не освобождает, вот её используют для HFT.
Re[2]: Интервью .NET и сборщик мусора
От: Тёмчик Австралия жж
Дата: 27.11.20 04:28
Оценка:
Здравствуйте, __kot2, Вы писали:

__>у нас например в питоне была проблема что приложение по работе зажирало через пару часов с терабайт оперативки. начали разбираться, оказалось если поменять сборщик мусора на кастомный jmalloc или как-то так, то там все оставалось в пределах гигов 20ти. то есть кто бы знал, что сборщик мусора питона 2.7 по крайней мере вообще никогда память не освобождает


Раньше в скриптовых языках вроде питона и перла использовался счетчик ссылок, соответственно кольцевые ссылки не освобождались. Но это общая с C++ проблема. ХЗ как сейчас.
Re[2]: Интервью .NET и сборщик мусора
От: Farsight СССР  
Дата: 27.11.20 07:00
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>P.S.

F>Популярный вопрос про class/struct это ведь тоже на самом деле вопрос про GC (примерно все отвечают что класс-в куче, а структура — в стеке, но вот дальше, на что это повлияет-то, и вообще что есть "куча", а что "стек" отвечают уже не все, некоторые тут отвечают, что стек — это когда первым пришло, первым ушло...)

Это разворот стэка!
</farsight>
Re[2]: Интервью .NET и сборщик мусора
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.11.20 15:53
Оценка:
Здравствуйте, Sharov, Вы писали:
S>А так основные сценарии это когда начинается critical path в коде, или чувствительный к latency код, когда прерывания нашего кода крайне нежелательно (stop the world), перед этими участками кода и делают gc. У Клеппмана очень круто про это написано буквально на пару страниц.
А можно ссылочку на Клеппмана?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Интервью .NET и сборщик мусора
От: Sharov Россия  
Дата: 27.11.20 16:53
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

S>Ага, нашёл.
S>Я просто удивился — как так, Клеппман мало того, что в распределёнке шарит, так ещё и C#-гуру!

Скорее ява.

S>>У меня англ. издание, глава 8, раздел Process Pauses, стр. 295 — 299. Там вперемешку со всяким прочим. Скорее пару абзацев,

S>>а не пару страниц. На худой край -- страница.
S>Ну, если честно, у Клеппмана написано не просто "делайте GC перед критичным участком" — там написано

Я не очень точно выразился, видимо, ибо написал это не в контексте Клепмана. Сам я это вычитал где-то еще (скорее всего хабр),
просто у Клепмана описаны возможные косяки с gc в распределенных приложениях. Плюс он дает рекомендации по паттернам
выделения памяти и gc -- создавать short-lived objects и чаще дергать gc, задержки будут меньше. Либо как процитировано ниже
-- в полный уход, по типу падения.

S>

S>An emerging idea is to treat GC pauses like brief planned outages of a node, and to let other nodes handle requests from clients while one node is collecting its garbage.
S>If the runtime can warn the application that a node soon requires a GC pause, the application can stop sending new requests to that node, wait for it to finish processing outstanding requests, and then perform the GC while no requests are in progress.
S>This trick hides GC pauses from clients and reduces the high percentiles of response time [70, 71]. Some latency-sensitive financial trading systems [72] use this approach.

S>То есть надо сначала всем сказать "падажжы", потом дождаться окончания реквестов, и только потом делать GC. А потом рапортовать "я всё, засылайте запросы".
Кодом людям нужно помогать!
Re: Интервью .NET и сборщик мусора
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.11.20 08:43
Оценка:
Здравствуйте, Glas, Вы писали:

The updated GetGCMemoryInfo API in .NET 5.0 and how it can help you

Суть не столько вмешиваться, сколько понимать какого влияние сборки мусора на ваш код и влияние вашего кода на сборку мусора.
Для примера Task и ValueTask. Не нужно использовать классы, там где проще обойтись структурой.
Яркий пример Падение производительности при повторной сортировке массива объектов
Автор: Serginio1
Дата: 20.10.03


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

Сейчас для уменьшения копирования используют Span&lt;T&gt; и Memory&lt;T&gt;
Народ эксперименты ставил на выделение памяти объектов на стеке A new stackalloc operator for reference types with CoreCLR and Roslyn

Большинство изменений в .Net идет к уменьшению копирования и преобразований. Благодаря ref struct появились не только Span<T> , но и ReadOnlySpan, Utf8JsonReader итд
и солнце б утром не вставало, когда бы не было меня
Отредактировано 28.11.2020 8:50 Serginio1 . Предыдущая версия .
Re[2]: Интервью .NET и сборщик мусора
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 29.11.20 01:40
Оценка:
Здравствуйте, HFTMan, Вы писали:

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


G>>Всем привет.


G>>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?
HFT>Все highload проекты(эдак десятки, если не сотни тысяч RPS), реализуемые на .NET Core-требуют глубокого понимания механизмов работы GC и умения этим пользоваться.

Но обычно то пишут опердень, а спрашивают будто что-то серьезное
Re[3]: Интервью .NET и сборщик мусора
От: HFTMan  
Дата: 30.11.20 07:00
Оценка:
Здравствуйте, kaa.python, Вы писали:

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


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


G>>>Всем привет.


G>>>Недавно проходил несколько собеседований на .NET и частенько спрашивают про работу GC.

G>>>Стало интересно, как часто вы вмешиваетесь в его работу и по каким причинам?
HFT>>Все highload проекты(эдак десятки, если не сотни тысяч RPS), реализуемые на .NET Core-требуют глубокого понимания механизмов работы GC и умения этим пользоваться.

KP>Но обычно то пишут опердень, а спрашивают будто что-то серьезное

Когда я собеседовал на тему работы GC-нужда действительно заставляла знать потроха GC.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.