Сборка мусора (Garbage Collection, GC) .NET в C# - Учим Шарп #28

Поделиться
HTML-код
  • Опубликовано: 24 авг 2024
  • Сборка мусора (Garbage Collection, GC) .NET на примере языка программирования C#
    На этом занятии мы узнаем, что такое сборщик мусора (garbage collector, gc) и он выполняет освобождение памяти, оберегая наши приложения от утечки. Узнаем, как выполняется сборка мусора (garbage collection), поколения (generation) объектов, а также придется чуть подробнее поговорить про ссылочные (reference type) и значимые (value type) типы, как они хранятся в памяти стека (stack) и управляемой кучи (heap). Изучим основные методы System.GC, такие как Collect, GetGeneration, GetTotalMemory и другие. Узнаем, что на самом деле делает оператор new.
    -----------
    ПОДПИШИСЬ на соцсети:
    🔴 TELEGRAM: bit.ly/tg_code...
    🔴 VK: bit.ly/vk_code...
    🔴 INSTAGRAM: bit.ly/inst_co...
    🔴 Яндекс Дзен: bit.ly/zen_cod...
    🔴 FACEBOOK: bit.ly/fb_code...
    🔴 TWITTER: bit.ly/twit_cod...
    🔴 Мой блог: bit.ly/site_co...
    -----------
    ПОДДЕРЖИ развитие CODE BLOG:
    💲 Донат: bit.ly/donate_...
    💲 Спонсорство: bit.ly/patreon...
    -----------
    СМОТРИ мои обучающие курсы:
    👉 УЧИМ ШАРП: bit.ly/cs_code...
    👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #1: bit.ly/fit_cod...
    👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #2: bit.ly/crm_cod...
    👉 СТРУКТУРЫ ДАННЫХ: bit.ly/ds_code...
    👉 АЛГОРИТМЫ СОРТИРОВКИ: bit.ly/sort_co...
    👉 ОТВЕТЫ НА ВОПРОСЫ: bit.ly/faq_cod...
    👉 IT ПЕРЕОЗВУЧКА: bit.ly/resound...
    👉 НЕЙРОННАЯ СЕТЬ: bit.ly/ai_code...
    👉 ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ: bit.ly/pattern...
    👉 CODE REVIEW: bit.ly/review_...
    👉 CLR via C#: bit.ly/clr_cod...
    -----------
    Кстати, меня зовут Шванов Вадим, и я профессиональный .NET разработчик с 2011 года и автор этого канала CODE BLOG. Я рассказываю про IT технологии и веду абсолютно бесплатный курс по языку C# с нуля. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP .NET, .NET Core, ASP.NET MVC, Unity, WPF, структуры данных и алгоритмы, с#, dotnet, паттерны проектирования, информатика, csharp, программное обеспечение и многое другое. Для меня важно не только показать практическое применение языка си шарп, но и объяснить основную идею и базовые понятия Computer Science. В качестве основного инструмента разработки используется Visual Studio c# и проекты на Visual c#. Если вам нравятся такие каналы как хауди хо, айти борода, Soer или ExtremeCode, то здесь вам точно понравится.
    -----------
    #codeblog #программирование #csharp #ityoutubersru #программист #разработка

Комментарии • 39

  • @CODEBLOG
    @CODEBLOG  5 лет назад +10

    На этом занятии мы узнаем, что такое сборщик мусора (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
    @alexandrsavin2266 Год назад

    Отдуши, бро. Смотрю в 23 году и всё равно доволен )

  • @m1xaedzy
    @m1xaedzy 2 года назад +4

    26:00, обьекты могут не сжиматься, алгоритм sweep, рассчитан на то, что если памяти достаточно, для размещения новых обьектов, то он будет использовать те очищенные и незанятые дырочки
    27:00 о new, бесспорно, но к примеру структура тоже создается через new, но при этом располагается в стеке)
    35:30 в куче есть списки свободных участков памяти, поэтому поиск их и занимает мин кол-во времени. Если ее не достаточно, gc выбежит сама

  • @Pirojochek93
    @Pirojochek93 4 года назад +3

    Отличный урок, большое спасибо!

  • @atler9865
    @atler9865 4 года назад +2

    Про собеседование очень интересно! Обязательно после курса и 2 интенсивов надо погуглить вопросы

  • @nouchance
    @nouchance 2 года назад +1

    Спасибо Сэр ! вы лучший!

  • @Kostiantyn_M
    @Kostiantyn_M 4 года назад +5

    В LOH обьекты попадают которые больше приблизительно 83 килобайт (>=85,000 bytes).

  • @user-zb3pb9vi2q
    @user-zb3pb9vi2q 3 года назад +3

    Крайне тяжело слушать, начинается предложение - тут же появляется какой то вася с глупым комментарием и на него надо отвлечься и ответить, затем еще два слова предложения - появляется петя и пете надо ответить. Отвечать нужно конечно, но МОЖЕТ - на глупые и несущественные вопросы не отвечать вообще а на вопросы по делу отвечать после каких то блоков инофмарции?

  • @user-tn3bw1wg8w
    @user-tn3bw1wg8w 4 года назад +1

    1:05:48 - Уважаемый, не в коем случае Я, "не умнечаю". Но для таких моментов, есть клёвая опция в Visual Studio, как "Профилировщик производительности" (Alt+F2). Там подробно можно посмотреть, как ваша программа грузит железо. Если Я конечно же не ошибаюсь) хорошего настроения, спасибо за видео) от меня 👍

  • @cheeryprogrammer6821
    @cheeryprogrammer6821 4 года назад +3

    Спасибо, очень доходчиво объяснено, что такое "ээээээ..." и когда его использовать.

  • @gamb5730
    @gamb5730 3 года назад +2

    41:04 вы хотели сказать, очищаются объекты первого поколения на которых нету ссылки, а остальные переходят во 2е поколение?

    • @gamb5730
      @gamb5730 3 года назад

      или все же объектам 1го поколения на которые не ссылаются
      присваивается второе поколение ?

  • @vladislavhmelnitskij1239
    @vladislavhmelnitskij1239 4 года назад +3

    Бротишка, ты лучший, не хочешь попилить контент конкретно по. Net core?)
    Если уже пилишь, то соре, не заметил, посмотрю ещё раз)

    • @vladislavhmelnitskij1239
      @vladislavhmelnitskij1239 4 года назад

      Кстати, про ресурсы для новичков, ещё habr есть, Microsoft dots(вроде так), и professor.web

  • @rhm8471
    @rhm8471 2 года назад +1

    Автор оговорился насчет размера больших объектов. Согласно документации майкрософта в большую кучу попадают объекты размером 85 000байт, т.е. 83Килобайта.

  • @juliusmalkov9620
    @juliusmalkov9620 5 лет назад +5

    я смелый человек готовый на собеседование) но не сейчас) через месяц полтора точно)

  • @NickStarkUA
    @NickStarkUA 2 года назад +1

    Кстати инфа устарела про то, что приложение останавливается во время работы коллектора! На сколько мне известно, уже не останавливается

    • @m1xaedzy
      @m1xaedzy 2 года назад

      Да, работает в фоне

  • @yauhenidzenisenka8874
    @yauhenidzenisenka8874 5 лет назад +30

    Много трепа не по теме и отвлечений. Про стэк и хип начинал раз 10, прерывался на комменты, на что-то еще, в итоге за 10 минут не мог связать 2 слов.

    • @m1xaedzy
      @m1xaedzy 3 года назад +2

      Даа, отвлечения достали, но помогло х1.5 😂

    • @kontrast6514
      @kontrast6514 2 года назад

      Когда чел посмотрел первые 15 минут и сделал вывод по всей трансляции

  • @nickstark6961
    @nickstark6961 3 года назад

    В новых версия вижуалки, программа не останавливается, кстати.

  • @Console.WriteLine
    @Console.WriteLine Год назад

    Музыка отвлекает, особенно когда смотришь на 1.5

  • @d3dx259
    @d3dx259 4 года назад +2

    Ты пытался создать свой яп?

  • @d3dx259
    @d3dx259 4 года назад +4

    Когда сказал "Йоу" - 25 лет

    • @CODEBLOG
      @CODEBLOG  4 года назад +1

      Если бы оно так работало...

  • @sashkosashok
    @sashkosashok 4 года назад +2

    Не помню рассказа про финализатор и интерфейс IDisposable в предыдущих уроках.

    • @CODEBLOG
      @CODEBLOG  4 года назад +1

      это отдельная тема на самом деле ) в CLR курсе эта тема будет рассматриваться подробно

  • @user-zn6tw1yy7h
    @user-zn6tw1yy7h 4 года назад +1

    спасибо большое =)

    • @CODEBLOG
      @CODEBLOG  4 года назад

      Всегда пожалуйста )

  • @Mulcidei
    @Mulcidei 3 года назад

    Извините но я так и не понял што делаэт диструктор (~) ???

  • @sqwotina
    @sqwotina 5 лет назад +1

    Здравствуйте. Подскажите, пожалуйста, каким образом стэк отделяется от кучи физически? За счет чего стэк быстрее? Просто за счет упорядоченности?
    И еще один вопрос. Значимые типы, которые объявляются внутри класса хранятся в стэке? Например С.Value. Понятно, что ссылка на класс есть в стэке, а где сама переменная Value? Спасибо

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      Stask и Heap. Оба этих хранилища находятся в оперативной памяти системы (RAM), но программно-аппаратный комплекс (процессор + операционная система + библиотеки .NET) работают с этими областями памяти по-разному. Cтек намного быстрее кучи. Причина в том, каким образом выделяется стек - простым назначением указателя стека (единственная команда ассемблера). В отличие от стека куча обслуживается программно, с помощью специальных вызовов API операционной системы или библиотек. Кроме того, при интенсивном использовании кучи некоторые языки, использующие автоматический сбор мусора (например, Java, C# .NET), могут вводить не прогнозируемые дополнительные задержки при выполнении кода в реальном времени.

    • @sqwotina
      @sqwotina 5 лет назад

      Спасибо. Стало немного яснее)

  • @Eduard02834
    @Eduard02834 2 года назад

    ++

  • @YTsyvinda
    @YTsyvinda 5 лет назад +2

    На 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
    }
    }
    }
    }

    • @CODEBLOG
      @CODEBLOG  5 лет назад +1

      Не совсем. Поколение объекта не понижается. Упорядочивание объектов производится перед завершением работы сборщика мусора.

    • @YTsyvinda
      @YTsyvinda 5 лет назад

      @@CODEBLOG спасибо за ответ!

  • @alexazimov420
    @alexazimov420 2 года назад

    Какой ты нудный. И постоянно теряешь тему.