SlideShare a Scribd company logo
1 of 11
.NET Framework & C#
Module 12.2 Garbage Collector
В цьому модулі:
 Життєвий цикл об’єктів
 Поняття збирача мусору
 Деструктор і метод Finalize
 Метод Dispose і інтерфейс IDispose
 Клас System.GC
 Поняття поколінь при збиранні мусору
2
Andrii Hladkyi
trilobt@gmail.com
Життєвий цикл об’єктів
 Життєвий цикл будь якого об'єкта можна подати так:
◦ виділення пам'яті для типу;
◦ ініціалізація виділеної пам'яті (установка об'єкта в початкове значення,
виклик конструктора);
◦ використання об'єкта в програмі;
◦ руйнація стану об'єкта;
◦ звільнення зайнятої пам'яті.
 Управління життєвим циклом об'єктів являє собою важку задачу і є
постійним джерелом помилок. Тому був розроблений автоматичний
механізм управління пам'яттю – збір сміття.
Andrii Hladkyi
trilobt@gmail.com 3
Поняття збирача мусору
 Збір сміття звільняє програміста від необхідності постійно стежити за
використанням і своєчасним звільненням пам'яті.
 Спеціальний код, який здійснює збір сміття називається «збирач сміття» (Garbage
Collector).
 Збирач сміття відстежує і знищує об'єкти, що знаходяться в керованої пам'яті.
 Збирання сміття автоматично запускається в разі, якщо необхідний обсяг пам'яті
більше доступного обсягу вільної пам'яті. Крім того, програма може примусово
запустити збірку сміття за допомогою методу Collect класу System.GC.
Збирання сміття складається з таких кроків:
 Збирач сміття здійснює пошук керованих об'єктів, на які є посилання в
керованому коді.
 Збирач сміття намагається завершити об'єкти, на які немає посилань.
 Збирач сміття звільняє об'єкти, на які немає посилань, і вивільняє виділену їм
пам'ять.
Andrii Hladkyi
trilobt@gmail.com 4
Деструктор і метод Finalize
 Збирач сміття вміє автоматично руйнувати прості об'єкти (такі, як
String, Delegate і ін.) І звільняти займану ними пам'ять. Що ж
стосується складних типів, то їх збирач сміття правильно руйнувати не
вміє, і тому необхідно писати спеціальний екземплярний код для
правильного знищення об'єкта.
 Для таких типів C# підтримує спеціальний механізм, званий
фіналізацією об'єктів (finalization). Для виконання цього механізму
об'єкт повинен реалізувати однойменний метод (Finalize), який буде
викликаний збирачем сміття безпосередньо перед його знищенням.
 В C# для визначення завершувача використовується тильда (~) і ім'я
класу.
 Перевантажувати фіналізатор і використовувати в ньому параметри не
можна.
Andrii Hladkyi
trilobt@gmail.com 5
Andrii Hladkyi
trilobt@gmail.com 6
Демонстрація
Метод Dispose і інтерфейс IDispose
 Метод Finalize () безпосередньо викликати не можна - його викликає
Garbage Collector при руйнуванні об'єкта під час збірки сміття.
 Для явного звільненні ресурсів потрібно реалізувати інтерфейс
IDisposable, який визначає наявність методу Dispose() у своїх
спадкоємців. Користувач об'єкта повинен викликати цей метод при
завершенні використання об'єкта.
Andrii Hladkyi
trilobt@gmail.com 7
Andrii Hladkyi
trilobt@gmail.com 8
Демонстрація
Клас System.GC
 Клас, що представляє збирач сміття, називається
System.GC. Методи цього класу впливають на те,
коли виконується збірка сміття і коли вивільняються
ресурси, виділені об'єкту.
Andrii Hladkyi
trilobt@gmail.com 9
Andrii Hladkyi
trilobt@gmail.com 10
Демонстрація
Поняття поколінь при збиранні мусору
 Збирач сміття після очищення пам'яті, щоб не допустити фрагментації,
«стискає» її, іншими словами, він «зсуває» всі об'єкти так, щоб вони
розташовувалися послідовно.
 Як показали дослідження, велика частина об'єктів, які створені недавно,
швидко стають недосяжними. Тому керована купа була розділена на 3
покоління: 0, 1 і 2. Розмір пам'яті під кожне з поколінь різний - він
збільшується з ростом номера покоління.
 Всі новостворені об'єкти потрапляють в перше (0) покоління. Збір сміття
автоматично викликається по закінченню пам'яті в одному з поколінь
 Об'єкти, які пережили збір сміття, переходять в наступне покоління.
 Даний підхід дозволяє дуже швидко очищати пам'ять: чим менше розмір
покоління, тим швидше проходять операції по дефрагментації пам'яті.
Andrii Hladkyi
trilobt@gmail.com 11

More Related Content

What's hot

Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOPNet Framework and c# module 2. OOP
Net Framework and c# module 2. OOPAndrii Hladkyi
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. SerializationAndrii Hladkyi
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8Andrii Hladkyi
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2eleksdev
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16Andrii Hladkyi
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17Andrii Hladkyi
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14Andrii Hladkyi
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3eleksdev
 
08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOPeleksdev
 
01 Incapsulation
01 Incapsulation01 Incapsulation
01 Incapsulationolegapster
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 
"Unit testing in AngularJS" Виктор Зозуляк
"Unit testing in AngularJS" Виктор Зозуляк"Unit testing in AngularJS" Виктор Зозуляк
"Unit testing in AngularJS" Виктор ЗозулякFwdays
 
12 Architecture
12 Architecture12 Architecture
12 Architectureeleksdev
 
IT Talks The c++'s simplest smart pointers in depth
IT Talks The c++'s simplest smart pointers in depthIT Talks The c++'s simplest smart pointers in depth
IT Talks The c++'s simplest smart pointers in depthVadym Muliavka
 

What's hot (15)

Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOPNet Framework and c# module 2. OOP
Net Framework and c# module 2. OOP
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. Serialization
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14
 
Advanced c sharp part 3
Advanced c sharp part 3Advanced c sharp part 3
Advanced c sharp part 3
 
08 Exceptions and AOP
08  Exceptions and AOP08  Exceptions and AOP
08 Exceptions and AOP
 
01 Incapsulation
01 Incapsulation01 Incapsulation
01 Incapsulation
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 
"Unit testing in AngularJS" Виктор Зозуляк
"Unit testing in AngularJS" Виктор Зозуляк"Unit testing in AngularJS" Виктор Зозуляк
"Unit testing in AngularJS" Виктор Зозуляк
 
12 Architecture
12 Architecture12 Architecture
12 Architecture
 
Tdd, ти де?
Tdd, ти де?Tdd, ти де?
Tdd, ти де?
 
IT Talks The c++'s simplest smart pointers in depth
IT Talks The c++'s simplest smart pointers in depthIT Talks The c++'s simplest smart pointers in depth
IT Talks The c++'s simplest smart pointers in depth
 

Similar to NET Framework and C# Module 12.2. Garbage Collector

Net framework і c# module 15
Net framework і c# module 15Net framework і c# module 15
Net framework і c# module 15Andrii Hladkyi
 
презентація поняття події
презентація   поняття подіїпрезентація   поняття події
презентація поняття подіїOlga Sokolik
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)Anatoliy Okhotnikov
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5Andrii Hladkyi
 
System programing module 2
System programing module 2System programing module 2
System programing module 2Andrii Hladkyi
 
System programing module 1
System programing module 1System programing module 1
System programing module 1Andrii Hladkyi
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_netRingonoki
 
Android: Інструменти програміста
Android: Інструменти програмістаAndroid: Інструменти програміста
Android: Інструменти програмістаAnatoliy Odukha
 

Similar to NET Framework and C# Module 12.2. Garbage Collector (12)

Net framework і c# module 15
Net framework і c# module 15Net framework і c# module 15
Net framework і c# module 15
 
5classdist4
5classdist45classdist4
5classdist4
 
презентація поняття події
презентація   поняття подіїпрезентація   поняття події
презентація поняття події
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5
 
System programing module 2
System programing module 2System programing module 2
System programing module 2
 
System programing module 1
System programing module 1System programing module 1
System programing module 1
 
6 клас
6 клас 6 клас
6 клас
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_net
 
6_21.pptx
6_21.pptx6_21.pptx
6_21.pptx
 
Android: Інструменти програміста
Android: Інструменти програмістаAndroid: Інструменти програміста
Android: Інструменти програміста
 
Patterns.pptx
Patterns.pptxPatterns.pptx
Patterns.pptx
 

More from Andrii Hladkyi (20)

Net Framework and c# Lesson 1
Net Framework and c# Lesson 1Net Framework and c# Lesson 1
Net Framework and c# Lesson 1
 
Wpf module 2
Wpf module 2Wpf module 2
Wpf module 2
 
Wpf module 1
Wpf module 1Wpf module 1
Wpf module 1
 
Msp module 3
Msp module 3Msp module 3
Msp module 3
 
Msp module 2
Msp module 2Msp module 2
Msp module 2
 
Msp module 1
Msp module 1Msp module 1
Msp module 1
 
Ado.net module 2
Ado.net module 2Ado.net module 2
Ado.net module 2
 
Ado.net module 1
Ado.net module 1Ado.net module 1
Ado.net module 1
 
Design pattern module 1
Design pattern module 1Design pattern module 1
Design pattern module 1
 
Win api module_2.0_gdi+
Win api module_2.0_gdi+Win api module_2.0_gdi+
Win api module_2.0_gdi+
 
Win api module_1.1_ok
Win api module_1.1_okWin api module_1.1_ok
Win api module_1.1_ok
 
Win api module_6.2
Win api module_6.2Win api module_6.2
Win api module_6.2
 
Design pattern module 1
Design pattern module 1Design pattern module 1
Design pattern module 1
 
Net framework і c# lesson1
Net framework і c# lesson1Net framework і c# lesson1
Net framework і c# lesson1
 
Uml module 6
Uml module 6Uml module 6
Uml module 6
 
Uml module 5
Uml module 5Uml module 5
Uml module 5
 
Uml module 4
Uml module 4Uml module 4
Uml module 4
 
Uml module 3
Uml module 3Uml module 3
Uml module 3
 
Uml module 2
Uml module 2Uml module 2
Uml module 2
 
Uml module 1
Uml module 1Uml module 1
Uml module 1
 

NET Framework and C# Module 12.2. Garbage Collector

  • 1. .NET Framework & C# Module 12.2 Garbage Collector
  • 2. В цьому модулі:  Життєвий цикл об’єктів  Поняття збирача мусору  Деструктор і метод Finalize  Метод Dispose і інтерфейс IDispose  Клас System.GC  Поняття поколінь при збиранні мусору 2 Andrii Hladkyi trilobt@gmail.com
  • 3. Життєвий цикл об’єктів  Життєвий цикл будь якого об'єкта можна подати так: ◦ виділення пам'яті для типу; ◦ ініціалізація виділеної пам'яті (установка об'єкта в початкове значення, виклик конструктора); ◦ використання об'єкта в програмі; ◦ руйнація стану об'єкта; ◦ звільнення зайнятої пам'яті.  Управління життєвим циклом об'єктів являє собою важку задачу і є постійним джерелом помилок. Тому був розроблений автоматичний механізм управління пам'яттю – збір сміття. Andrii Hladkyi trilobt@gmail.com 3
  • 4. Поняття збирача мусору  Збір сміття звільняє програміста від необхідності постійно стежити за використанням і своєчасним звільненням пам'яті.  Спеціальний код, який здійснює збір сміття називається «збирач сміття» (Garbage Collector).  Збирач сміття відстежує і знищує об'єкти, що знаходяться в керованої пам'яті.  Збирання сміття автоматично запускається в разі, якщо необхідний обсяг пам'яті більше доступного обсягу вільної пам'яті. Крім того, програма може примусово запустити збірку сміття за допомогою методу Collect класу System.GC. Збирання сміття складається з таких кроків:  Збирач сміття здійснює пошук керованих об'єктів, на які є посилання в керованому коді.  Збирач сміття намагається завершити об'єкти, на які немає посилань.  Збирач сміття звільняє об'єкти, на які немає посилань, і вивільняє виділену їм пам'ять. Andrii Hladkyi trilobt@gmail.com 4
  • 5. Деструктор і метод Finalize  Збирач сміття вміє автоматично руйнувати прості об'єкти (такі, як String, Delegate і ін.) І звільняти займану ними пам'ять. Що ж стосується складних типів, то їх збирач сміття правильно руйнувати не вміє, і тому необхідно писати спеціальний екземплярний код для правильного знищення об'єкта.  Для таких типів C# підтримує спеціальний механізм, званий фіналізацією об'єктів (finalization). Для виконання цього механізму об'єкт повинен реалізувати однойменний метод (Finalize), який буде викликаний збирачем сміття безпосередньо перед його знищенням.  В C# для визначення завершувача використовується тильда (~) і ім'я класу.  Перевантажувати фіналізатор і використовувати в ньому параметри не можна. Andrii Hladkyi trilobt@gmail.com 5
  • 7. Метод Dispose і інтерфейс IDispose  Метод Finalize () безпосередньо викликати не можна - його викликає Garbage Collector при руйнуванні об'єкта під час збірки сміття.  Для явного звільненні ресурсів потрібно реалізувати інтерфейс IDisposable, який визначає наявність методу Dispose() у своїх спадкоємців. Користувач об'єкта повинен викликати цей метод при завершенні використання об'єкта. Andrii Hladkyi trilobt@gmail.com 7
  • 9. Клас System.GC  Клас, що представляє збирач сміття, називається System.GC. Методи цього класу впливають на те, коли виконується збірка сміття і коли вивільняються ресурси, виділені об'єкту. Andrii Hladkyi trilobt@gmail.com 9
  • 11. Поняття поколінь при збиранні мусору  Збирач сміття після очищення пам'яті, щоб не допустити фрагментації, «стискає» її, іншими словами, він «зсуває» всі об'єкти так, щоб вони розташовувалися послідовно.  Як показали дослідження, велика частина об'єктів, які створені недавно, швидко стають недосяжними. Тому керована купа була розділена на 3 покоління: 0, 1 і 2. Розмір пам'яті під кожне з поколінь різний - він збільшується з ростом номера покоління.  Всі новостворені об'єкти потрапляють в перше (0) покоління. Збір сміття автоматично викликається по закінченню пам'яті в одному з поколінь  Об'єкти, які пережили збір сміття, переходять в наступне покоління.  Даний підхід дозволяє дуже швидко очищати пам'ять: чим менше розмір покоління, тим швидше проходять операції по дефрагментації пам'яті. Andrii Hladkyi trilobt@gmail.com 11