Интервью .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 и сборщик мусора
От: 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 и сборщик мусора
От: mrTwister Россия  
Дата: 26.11.20 09:11
Оценка: +1
Здравствуйте, Glas, Вы писали:

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


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

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

Дело не во вмешивании в GC, а в том, что у приложения могут быть нефункциональные баги, для предотвращения и исправления которых надо понимать, как работает 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: Интервью .NET и сборщик мусора
От: fmiracle  
Дата: 26.11.20 09:48
Оценка: 5 (1) +3
Здравствуйте, Glas, Вы писали:

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

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

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

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

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


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

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

Imho на вопросы с GC мастурбируют часто те, кто алгоритмы не осилил. Реально GC могут отключать, для гарантированного отклика, на бирже, например. Т.е. память никак не освобождается, а узел периодически перезагружается. Ну и памяти туда ставят щедро.
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[2]: Интервью .NET и сборщик мусора
От: a7d3  
Дата: 26.11.20 14:43
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

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


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


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

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

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


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

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


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

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


Крайне редко, бужу его, когда нужна немедленная чистка.
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: Интервью .NET и сборщик мусора
От: Gradiens  
Дата: 27.11.20 06:55
Оценка: +1 :)
Здравствуйте, Glas, Вы писали:

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


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

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

Вмешиваюсь редко, да там и возможность вмешательства весьма ограничена. Так, настроить чуток.
Но вот разгребать Авгиевы конюшни в поисках утечек — это да, бывает.
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[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 не работаешь).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.