SlideShare a Scribd company logo
9-я конференция .NET разработчиков 
12 октября 2014 
dotnetconf.ru 
Внутреннее устройство GC 
Мурадов Артем 
http://muradov.pro/
2 
Garbage collection 
Что это? 
Зачем это?
3 
Garbage collection 
Висячие ссылки 
Утечки памяти 
Двойное освобождение памяти 
Эффективная реализация неизменяемых структур данных 
Быстрое выделение памяти 
Требует дополнительных ресурсов 
Момент начала сборки мусора заранее неизвестен 
Отсутствие RAII
4 
Как это работает 
Принцип работы 
• За сборку мусора отвечает среда исполнения 
• Точное время начала автоматической сборки мусора определить 
невозможно 
Достижимость объектов 
• Корневые объекты 
• Объекты, на которые ссылаются достижимые
5 
Алгоритмы сборки мусора 
• Копирующая сборка мусора 
• Подсчет ссылок 
• Сборка на основе трассировки 
• ……
6 
Копирующая сборка мусора 
Выделение памяти происходит 
очень быстро 
Требуется в 2 раза больше памяти 
Требует перемещений большого 
объема памяти
7 
Подсчет ссылок 
Определение достижимых объектов тривиально 
Счетчик занимает память 
Сложно работать с циклическими ссылками 
Замедляет присваивание ссылок
8 
Сборка на основе трассировки 
Циклические ссылки не проблема 
Отсутствие фрагментации памяти 
Требуется время на маркировку 
Требуется время на сжатие 
Требует остановки рабочих потоков
9 
Стратегии сборки мусора 
• Неперемещающие 
1. Быстрое освобождение 
2. Долгое выделение 
• Перемещающие 
1. Быстрое выделение памяти 
2. Совместные объекты в кэше 
3. Необходимость дефрагментации – долго! 
4. Изменение ссылок на перемещенные объекты – опасно! 
5. Работа с небезопасным кодом
10 
.NET 
• Сборщик мусора и управляемая куча 
• Корни и поколения 
• Финализаторы и ресурсы 
• Слабые ссылки 
• Мониторинг
11 
Сборщик мусора и управляемая куча 
Быстрое выделение памяти – просто сдвиг 
указателя на начало свободного участка памяти 
Явно освобождать память не нужно – это забота 
сборщика мусора 
Если в куче места не хватает, начинается сборка 
мусора
12 
Фазы сборки мусора 
• Маркировка 
• Очистка 
• Сжатие
13 
Условия начала сборки мусора 
Недостаточно физической памяти в системе. 
Память, используемая объектами, выделенными в 
управляемой куче, превышает допустимый 
порог. Этот порог непрерывно корректируется во 
время выполнения процесса. 
Вызывается метод GC.Collect. Практически во всех 
случаях вызов этого метода не потребуется, так как 
сборщик мусора работает непрерывно. Этот метод 
в основном используется для уникальных 
ситуаций и тестирования.
14 
Корни 
Статические поля 
Параметры методов 
Локальные переменные 
Регистры процессора 
GCHandle сборщика мусора (Normal/Pinned) 
Указатели в очереди финализации
15 
Пример с таймером
16 
Поколения объектов 
Поколение – серия объектов с 
близким временем существования. 
• Чем младше объект, тем короче его время жизни 
• Чем старше объект, тем длиннее его время жизни 
• Уборка мусора в части кучи выполняется быстрее, чем 
во всей куче
17 
Поколения объектов 
Сборка мусора только текущего поколения и 
всех меньших поколений 
Объект младшего поколения может 
ссылаться на объект старшего 
Write Barrier и Card Table
18 
Очистка и сжатие 
• Очистить память 
• Переместить 
объекты 
• Обновить ссылки
19 
Ещё глубже
20 
Финализация 
Механизм, позволяющий объекту выполнить корректную очистку, 
прежде чем сборщик мусора освободит занятую им память. 
Любой тип, выполняющий функцию оболочки машинного ресурса, 
должен поддерживать финализацию. 
• Отдельный поток для 
финализации 
• Объекты в очереди на 
финализацию подобны 
корням 
• Воскрешение 
• Вызывается даже при 
исключении в конструкторе
21 
System.Runtime.ConstrainedExecution.CriticalFinalizerObject 
• Компиляция методов финализации 
• Вызов финализаторов происходит после 
объектов, не унаследованных от 
CriticalFinalizerObject 
• Финализаторы вызываются даже если домен 
приложения был аварийно завершен 
• System.Runtime.InteropServices.SafeHandle для 
ресурсов Windows 
• System.Runtime.InteropServices.CriticalHandle
22 
Финализация управляемого 
ресурса 
• Больше времени на выделение памяти 
• Объект и все, на что он ссылается, переходит в 
старшее поколение 
• Удаление требует ресурсов 
• Шаблон освобождения ресурсов 
• Dispose & Close 
• RAII & IDisposable 
• using
23 
GC handle table 
• System.Runtime.InteropServices.GCHandle 
• GCHandleType (Weak / WeakTrackRessurrection / Normal / Pinned) 
• Сборщик мусора и GCHandle 
 Маркировка 
 Weak 
 Список финализации 
 WeakTrackRessurrection 
 Очистка и сжатие
24 
Слабые ссылки 
• System.WeakReference 
• Не работает с Normal и Pinned 
• Не реализует IDisposable 
• Занимает больше места 
• Находится в куче 
• Слабые делегаты 
• System.Runtime.CompilerServices.ConditionalWeakTable<TKey, 
TValue>
25 
Другие возможности GC 
• GC.AddMemoryPressure, GC.RemoveMemoryPressure 
• System.Runtime.InteropServices.HandleCollector 
• System.Runtime.MemoryFailPoint 
• System.GC.Collect 
• System.GC.MaxGeneration 
• System.GCCollectionMode 
• Default 
• Forced 
• Optimized 
• …
26 
Режимы сборки мусора 
• Рабочая станция 
• Параллельная (маркировка)/фоновая сборка мусора (2) 
• Однопоточная сборка мусора 
• Сервер 
• На каждый процессор отдельная куча 
• На каждый процессор отдельный поток 
System.Runtime.GCSettings.LatencyMode 
 Batch 
 Interactive 
 LowLatency 
 SustainedLowLatency
27 
Куча больших объектов (LOH) 
• Специальная область для больших объектов (85 000 байт 
и более) 
• Считается размер объекта 
• Поколение 2 
• Пулинг 
• Free Space Table 
System.Runtime.GCSettings.LargeObjectHeapCompactionMode 
• Default 
• CompactOnce
28 
Мониторинг 
• int System.GC.CollectionCount(int generation) 
• long System.GC.GetTotalMemory(bool forceFullCollection) 
• Счетчики производительности 
• CLR Profiler 
• SOS.dll
29 
Источники 
http://msdn.microsoft.com/ 
http://blogs.msdn.com/ 
http://blogs.msdn.com/b/abhinaba/ (Abhinaba Basu [MSFT]) 
https://wikipedia.org 
http://sergeyteplyakov.blogspot.ru/2012/10/net.html
30 
Спасибо за внимание 
Мурадов Артем 
http://muradov.pro/ 
tym32167@gmail.com 
twitter.com/tym32167

More Related Content

What's hot

Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
Ontico
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Ontico
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PavelKonotopov
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Профилирование Node.js
Профилирование Node.jsПрофилирование Node.js
Профилирование Node.js
Denis Chistyakov
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
Yuriy Nasretdinov
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойца
Igor Khokhryakov
 

What's hot (18)

Zabbix v2
Zabbix v2Zabbix v2
Zabbix v2
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 
Профилирование Node.js
Профилирование Node.jsПрофилирование Node.js
Профилирование Node.js
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойца
 

Viewers also liked

Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
Andrey Akinshin
 
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
DotNetConf
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NET
DotNetConf
 
Введение в реактивный .NET
Введение в реактивный .NETВведение в реактивный .NET
Введение в реактивный .NET
DotNetConf
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
Lev Goncharov
 
Know Your Security Model
Know Your Security ModelKnow Your Security Model
Know Your Security Model
Mikhail Shcherbakov
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
Машинное обучение на платформе .NET
Машинное обучение на платформе .NETМашинное обучение на платформе .NET
Машинное обучение на платформе .NET
DotNetConf
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
Alexander Byndyu
 

Viewers also liked (9)

Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
 
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NET
 
Введение в реактивный .NET
Введение в реактивный .NETВведение в реактивный .NET
Введение в реактивный .NET
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
 
Know Your Security Model
Know Your Security ModelKnow Your Security Model
Know Your Security Model
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 
Машинное обучение на платформе .NET
Машинное обучение на платформе .NETМашинное обучение на платформе .NET
Машинное обучение на платформе .NET
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
 

Similar to Внутреннее устройство GC

Garbage collector
Garbage collectorGarbage collector
Garbage collector
DelphiCon
 
An internal look at HotSpot JVM
An internal look at HotSpot JVMAn internal look at HotSpot JVM
An internal look at HotSpot JVM
Ecommerce Solution Provider SysIQ
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Mail.ru Group
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
Vladd Ev
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Dima Dzuba
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Mail.ru Group
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg PresentationHighLoad2009
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгинkuchinskaya
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascript
FDConf
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
Артем Захарченко
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
OpenVZ
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
Alex Chistyakov
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
it-people
 

Similar to Внутреннее устройство GC (20)

Garbage collector
Garbage collectorGarbage collector
Garbage collector
 
An internal look at HotSpot JVM
An internal look at HotSpot JVMAn internal look at HotSpot JVM
An internal look at HotSpot JVM
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascript
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
 
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
 

Внутреннее устройство GC

  • 1. 9-я конференция .NET разработчиков 12 октября 2014 dotnetconf.ru Внутреннее устройство GC Мурадов Артем http://muradov.pro/
  • 2. 2 Garbage collection Что это? Зачем это?
  • 3. 3 Garbage collection Висячие ссылки Утечки памяти Двойное освобождение памяти Эффективная реализация неизменяемых структур данных Быстрое выделение памяти Требует дополнительных ресурсов Момент начала сборки мусора заранее неизвестен Отсутствие RAII
  • 4. 4 Как это работает Принцип работы • За сборку мусора отвечает среда исполнения • Точное время начала автоматической сборки мусора определить невозможно Достижимость объектов • Корневые объекты • Объекты, на которые ссылаются достижимые
  • 5. 5 Алгоритмы сборки мусора • Копирующая сборка мусора • Подсчет ссылок • Сборка на основе трассировки • ……
  • 6. 6 Копирующая сборка мусора Выделение памяти происходит очень быстро Требуется в 2 раза больше памяти Требует перемещений большого объема памяти
  • 7. 7 Подсчет ссылок Определение достижимых объектов тривиально Счетчик занимает память Сложно работать с циклическими ссылками Замедляет присваивание ссылок
  • 8. 8 Сборка на основе трассировки Циклические ссылки не проблема Отсутствие фрагментации памяти Требуется время на маркировку Требуется время на сжатие Требует остановки рабочих потоков
  • 9. 9 Стратегии сборки мусора • Неперемещающие 1. Быстрое освобождение 2. Долгое выделение • Перемещающие 1. Быстрое выделение памяти 2. Совместные объекты в кэше 3. Необходимость дефрагментации – долго! 4. Изменение ссылок на перемещенные объекты – опасно! 5. Работа с небезопасным кодом
  • 10. 10 .NET • Сборщик мусора и управляемая куча • Корни и поколения • Финализаторы и ресурсы • Слабые ссылки • Мониторинг
  • 11. 11 Сборщик мусора и управляемая куча Быстрое выделение памяти – просто сдвиг указателя на начало свободного участка памяти Явно освобождать память не нужно – это забота сборщика мусора Если в куче места не хватает, начинается сборка мусора
  • 12. 12 Фазы сборки мусора • Маркировка • Очистка • Сжатие
  • 13. 13 Условия начала сборки мусора Недостаточно физической памяти в системе. Память, используемая объектами, выделенными в управляемой куче, превышает допустимый порог. Этот порог непрерывно корректируется во время выполнения процесса. Вызывается метод GC.Collect. Практически во всех случаях вызов этого метода не потребуется, так как сборщик мусора работает непрерывно. Этот метод в основном используется для уникальных ситуаций и тестирования.
  • 14. 14 Корни Статические поля Параметры методов Локальные переменные Регистры процессора GCHandle сборщика мусора (Normal/Pinned) Указатели в очереди финализации
  • 15. 15 Пример с таймером
  • 16. 16 Поколения объектов Поколение – серия объектов с близким временем существования. • Чем младше объект, тем короче его время жизни • Чем старше объект, тем длиннее его время жизни • Уборка мусора в части кучи выполняется быстрее, чем во всей куче
  • 17. 17 Поколения объектов Сборка мусора только текущего поколения и всех меньших поколений Объект младшего поколения может ссылаться на объект старшего Write Barrier и Card Table
  • 18. 18 Очистка и сжатие • Очистить память • Переместить объекты • Обновить ссылки
  • 20. 20 Финализация Механизм, позволяющий объекту выполнить корректную очистку, прежде чем сборщик мусора освободит занятую им память. Любой тип, выполняющий функцию оболочки машинного ресурса, должен поддерживать финализацию. • Отдельный поток для финализации • Объекты в очереди на финализацию подобны корням • Воскрешение • Вызывается даже при исключении в конструкторе
  • 21. 21 System.Runtime.ConstrainedExecution.CriticalFinalizerObject • Компиляция методов финализации • Вызов финализаторов происходит после объектов, не унаследованных от CriticalFinalizerObject • Финализаторы вызываются даже если домен приложения был аварийно завершен • System.Runtime.InteropServices.SafeHandle для ресурсов Windows • System.Runtime.InteropServices.CriticalHandle
  • 22. 22 Финализация управляемого ресурса • Больше времени на выделение памяти • Объект и все, на что он ссылается, переходит в старшее поколение • Удаление требует ресурсов • Шаблон освобождения ресурсов • Dispose & Close • RAII & IDisposable • using
  • 23. 23 GC handle table • System.Runtime.InteropServices.GCHandle • GCHandleType (Weak / WeakTrackRessurrection / Normal / Pinned) • Сборщик мусора и GCHandle  Маркировка  Weak  Список финализации  WeakTrackRessurrection  Очистка и сжатие
  • 24. 24 Слабые ссылки • System.WeakReference • Не работает с Normal и Pinned • Не реализует IDisposable • Занимает больше места • Находится в куче • Слабые делегаты • System.Runtime.CompilerServices.ConditionalWeakTable<TKey, TValue>
  • 25. 25 Другие возможности GC • GC.AddMemoryPressure, GC.RemoveMemoryPressure • System.Runtime.InteropServices.HandleCollector • System.Runtime.MemoryFailPoint • System.GC.Collect • System.GC.MaxGeneration • System.GCCollectionMode • Default • Forced • Optimized • …
  • 26. 26 Режимы сборки мусора • Рабочая станция • Параллельная (маркировка)/фоновая сборка мусора (2) • Однопоточная сборка мусора • Сервер • На каждый процессор отдельная куча • На каждый процессор отдельный поток System.Runtime.GCSettings.LatencyMode  Batch  Interactive  LowLatency  SustainedLowLatency
  • 27. 27 Куча больших объектов (LOH) • Специальная область для больших объектов (85 000 байт и более) • Считается размер объекта • Поколение 2 • Пулинг • Free Space Table System.Runtime.GCSettings.LargeObjectHeapCompactionMode • Default • CompactOnce
  • 28. 28 Мониторинг • int System.GC.CollectionCount(int generation) • long System.GC.GetTotalMemory(bool forceFullCollection) • Счетчики производительности • CLR Profiler • SOS.dll
  • 29. 29 Источники http://msdn.microsoft.com/ http://blogs.msdn.com/ http://blogs.msdn.com/b/abhinaba/ (Abhinaba Basu [MSFT]) https://wikipedia.org http://sergeyteplyakov.blogspot.ru/2012/10/net.html
  • 30. 30 Спасибо за внимание Мурадов Артем http://muradov.pro/ tym32167@gmail.com twitter.com/tym32167