На этом занятии мы узнаем, что такое сборщик мусора (garbage collector, gc) и он выполняет освобождение памяти, оберегая наши приложения от утечки. Узнаем, как выполняется сборка мусора (garbage collection), поколения (generation) объектов, а также придется чуть подробнее поговорить про ссылочные (reference type) и значимые (value type) типы, как они хранятся в памяти стека (stack) и управляемой кучи (heap). Изучим основные методы System.GC, такие как Collect, GetGeneration, GetTotalMemory и другие. Узнаем, что на самом деле делает оператор new. Кстати, меня зовут Вадим, и я программист на языке C# уже больше 8 лет. Рассказываю про IT технологии и веду этот курс по языку C# с нуля под названием Учим Шарп. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP.NET, Core, MVC, Unity, WCF, WPF, структуры данных и алгоритмы обработки, паттерны проектирования и многое другое. Для меня важно не только показать практическое применение языка C#, но и объяснить основную идею и базовые понятия Computer Science. Уроки c# выходят два раза в неделю в понедельник и четверг в 20-00 по МСК. Курс csharp рассчитан на то, чтобы изучить программирование с нуля. Разработка ведется в IDE Visual Studio. Подписывайтесь, впереди еще много интересного.
@alexandrsavin2266 Жыл бұрын
Отдуши, бро. Смотрю в 23 году и всё равно доволен )
@m1xaedzy2 жыл бұрын
26:00, обьекты могут не сжиматься, алгоритм sweep, рассчитан на то, что если памяти достаточно, для размещения новых обьектов, то он будет использовать те очищенные и незанятые дырочки 27:00 о new, бесспорно, но к примеру структура тоже создается через new, но при этом располагается в стеке) 35:30 в куче есть списки свободных участков памяти, поэтому поиск их и занимает мин кол-во времени. Если ее не достаточно, gc выбежит сама
@Pirojochek934 жыл бұрын
Отличный урок, большое спасибо!
@nouchance2 жыл бұрын
Спасибо Сэр ! вы лучший!
@Kostiantyn_M4 жыл бұрын
В LOH обьекты попадают которые больше приблизительно 83 килобайт (>=85,000 bytes).
@atler98654 жыл бұрын
Про собеседование очень интересно! Обязательно после курса и 2 интенсивов надо погуглить вопросы
@gamb57303 жыл бұрын
41:04 вы хотели сказать, очищаются объекты первого поколения на которых нету ссылки, а остальные переходят во 2е поколение?
@gamb57303 жыл бұрын
или все же объектам 1го поколения на которые не ссылаются присваивается второе поколение ?
@НиколайТорощин-е6э5 жыл бұрын
1:05:48 - Уважаемый, не в коем случае Я, "не умнечаю". Но для таких моментов, есть клёвая опция в Visual Studio, как "Профилировщик производительности" (Alt+F2). Там подробно можно посмотреть, как ваша программа грузит железо. Если Я конечно же не ошибаюсь) хорошего настроения, спасибо за видео) от меня 👍
@cheeryprogrammer68215 жыл бұрын
Спасибо, очень доходчиво объяснено, что такое "ээээээ..." и когда его использовать.
@vladislavhmelnitskij12394 жыл бұрын
Бротишка, ты лучший, не хочешь попилить контент конкретно по. Net core?) Если уже пилишь, то соре, не заметил, посмотрю ещё раз)
@vladislavhmelnitskij12394 жыл бұрын
Кстати, про ресурсы для новичков, ещё habr есть, Microsoft dots(вроде так), и professor.web
@nickstark69614 жыл бұрын
В новых версия вижуалки, программа не останавливается, кстати.
@sashkosashok5 жыл бұрын
Не помню рассказа про финализатор и интерфейс IDisposable в предыдущих уроках.
@CODEBLOG5 жыл бұрын
это отдельная тема на самом деле ) в CLR курсе эта тема будет рассматриваться подробно
@d3dx2595 жыл бұрын
Ты пытался создать свой яп?
@sqwotina5 жыл бұрын
Здравствуйте. Подскажите, пожалуйста, каким образом стэк отделяется от кучи физически? За счет чего стэк быстрее? Просто за счет упорядоченности? И еще один вопрос. Значимые типы, которые объявляются внутри класса хранятся в стэке? Например С.Value. Понятно, что ссылка на класс есть в стэке, а где сама переменная Value? Спасибо
@CODEBLOG5 жыл бұрын
Stask и Heap. Оба этих хранилища находятся в оперативной памяти системы (RAM), но программно-аппаратный комплекс (процессор + операционная система + библиотеки .NET) работают с этими областями памяти по-разному. Cтек намного быстрее кучи. Причина в том, каким образом выделяется стек - простым назначением указателя стека (единственная команда ассемблера). В отличие от стека куча обслуживается программно, с помощью специальных вызовов API операционной системы или библиотек. Кроме того, при интенсивном использовании кучи некоторые языки, использующие автоматический сбор мусора (например, Java, C# .NET), могут вводить не прогнозируемые дополнительные задержки при выполнении кода в реальном времени.
@sqwotina5 жыл бұрын
Спасибо. Стало немного яснее)
@СергійПанасенко-б7г3 жыл бұрын
Крайне тяжело слушать, начинается предложение - тут же появляется какой то вася с глупым комментарием и на него надо отвлечься и ответить, затем еще два слова предложения - появляется петя и пете надо ответить. Отвечать нужно конечно, но МОЖЕТ - на глупые и несущественные вопросы не отвечать вообще а на вопросы по делу отвечать после каких то блоков инофмарции?
@rhm84712 жыл бұрын
Автор оговорился насчет размера больших объектов. Согласно документации майкрософта в большую кучу попадают объекты размером 85 000байт, т.е. 83Килобайта.
@NickStarkUA3 жыл бұрын
Кстати инфа устарела про то, что приложение останавливается во время работы коллектора! На сколько мне известно, уже не останавливается
@m1xaedzy2 жыл бұрын
Да, работает в фоне
@Mulcidei3 жыл бұрын
Извините но я так и не понял што делаэт диструктор (~) ???
@juliusmalkov96205 жыл бұрын
я смелый человек готовый на собеседование) но не сейчас) через месяц полтора точно)
@d3dx2595 жыл бұрын
Когда сказал "Йоу" - 25 лет
@CODEBLOG5 жыл бұрын
Если бы оно так работало...
@ЮлияСоболь-ь4к5 жыл бұрын
спасибо большое =)
@CODEBLOG5 жыл бұрын
Всегда пожалуйста )
@Console.WriteLine Жыл бұрын
Музыка отвлекает, особенно когда смотришь на 1.5
@yauhenidzenisenka88745 жыл бұрын
Много трепа не по теме и отвлечений. Про стэк и хип начинал раз 10, прерывался на комменты, на что-то еще, в итоге за 10 минут не мог связать 2 слов.
@m1xaedzy3 жыл бұрын
Даа, отвлечения достали, но помогло х1.5 😂
@kontrast65142 жыл бұрын
Когда чел посмотрел первые 15 минут и сделал вывод по всей трансляции
@YTsyvinda5 жыл бұрын
На 40й минуте когда подводите итоги про поколения, правильно ли я понял: поколение 0 поколение 1 поколение 2 if(памяти не хватает) { вызывается Garbage Collection; foreach( делает проход по поколеню 0) { if(ссылка на объект есть) { объекту присваивается поколение 1; происходит фрагментация малых объектов; } else { ссылка на объект удаляется; } } if(памяти хватает) { GC прекращает работу; } else { foreach(делает проход по поколению 1) { if(ссылка на объект есть) { объекту присваивается поколение 2; происходит фрагментация малых объектов; } else { поколение объекта понижается на 1; снова GC делает проход по поколению 0; // с проверками // и если после всего этого памяти снова не хватает то тогда с поколение 2 происходит всё тоже что и с поколением 1 } } } }
@CODEBLOG5 жыл бұрын
Не совсем. Поколение объекта не понижается. Упорядочивание объектов производится перед завершением работы сборщика мусора.