Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Управление памятью в .NET для профессионалов

Покупка
Новинка
Артикул: 799580.02.99
Доступ онлайн
1 899 ₽
В корзину
Хотя в .NET управление памятью осуществляется автоматически, понимание того, как именно это делается, сулит немало преимуществ. Вы сможете писать более качественные программы, эффективно взаимодействующие с памятью. Книга, проверенная командой разработки .NET из "Майкрософт", содержит 25 сценариев поиска и устранения неисправностей, призванных помочь в диагностике сложных проблем при работе с памятью. Приводится также ряд полезных рекомендаций по написанию кода, учитывающих особенности управления памятью и позволяющих избежать типичных ошибок. Книга адресована разработчикам программного обеспечения для платформы .NET, архитекторам и специалистам по производительности.
202
246
273
274
329
397
533
537
573
Кокоса, К. Управление памятью в .NET для профессионалов : практическое руководство / К. Кокоса. - Москва : ДМК Пресс, 2020. - 802 с. - ISBN 978-5-97060-800-5. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2260357 (дата обращения: 08.10.2026). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Конрад Кокоса
Управление памятью в .NET  
для профессионалов


Pro .NET Memory  
Management
For Better Code, Performance, 
and Scalability
Konrad Kokosa


Управление памятью в .NET 
для профессионалов
Написание более качественного,  
производительного  
и масштабируемого кода
Конрад Кокоса
Москва, 2020


УДК 004.438.NET
ББК 32.973.26-018.2
К55
Кокоса К.
К55	
Управление памятью в .NET для профессионалов. – М.: ДМК Пресс, 2020. – 
800 с.: ил. 
ISBN 978-5-97060-800-5
Хотя в .NET управление памятью осуществляется автоматически, понимание 
того, как именно это делается, сулит немало преимуществ. Вы сможете писать более качественные программы, эффективно взаимодействующие с памятью. Книга 
содержит 25 сценариев поиска и устранения неисправностей, призванных помочь 
в диагностике сложных проблем при работе с памятью. Приводится также ряд полезных рекомендаций по написанию кода, учитывающих особенности управления 
памятью и позволяющих избежать типичных ошибок.
Книга адресована разработчикам программного обеспечения для платформы .NET, 
архитекторам и специалистам по производительности.
УДК  004.438.NET
ББК  32.973.26-018.2
Original English language edition printed on acid-free paper. Copyright © 2018 by Konrad Kokosa. 
Russian language edition copyright © 2020 by DMK Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
ISBN 978-1-4842-4026-7 (англ.)	
Copyright © 2018 by Konrad Kokosa
ISBN 978-5-97060-800-5 (рус.)	
©  Оформление, издание, перевод, ДМК Пресс, 2020


Моей любимой жене Юстине,  
без которой в моей жизни не случилось бы  
ничего сколько-нибудь важного


Содержание
Об авторе............................................................................................................................. 15
О технических рецензентах..................................................................................... 15
Благодарности.................................................................................................................. 16
Предисловие...................................................................................................................... 18
Введение.............................................................................................................................. 19
От издательства............................................................................................................... 25
Глава 1. Основные понятия....................................................................................... 26
Терминология, относящаяся к памяти.................................................................................... 27
Статическое выделение........................................................................................................ 33
Регистровая машина............................................................................................................. 34
Стек........................................................................................................................................ 35
Стековая машина.................................................................................................................. 40
Указатель............................................................................................................................... 43
Куча........................................................................................................................................ 45
Ручное управление памятью.................................................................................................... 47
Автоматическое управление памятью.................................................................................... 52
Распределитель, модификатор и сборщик......................................................................... 54
Подсчет ссылок.......................................................................................................................... 58
Отслеживающий сборщик........................................................................................................ 63
Этап пометки........................................................................................................................ 63
Этап сборки........................................................................................................................... 67
Немного истории....................................................................................................................... 71
Резюме....................................................................................................................................... 73
Правило 1: учиться, учиться и учиться............................................................................... 74
Глава 2. Низкоуровневое управление памятью........................................... 75
Оборудование............................................................................................................................ 76
Память................................................................................................................................... 81
Центральный процессор...................................................................................................... 84
Операционная система............................................................................................................. 99
Виртуальная память........................................................................................................... 100
Большие страницы.............................................................................................................. 104
Фрагментация виртуальной памяти................................................................................. 105
Общая структура памяти.................................................................................................... 105
Управление памятью в Windows........................................................................................ 107
Организация памяти в Windows........................................................................................ 112


Содержание    7
Управление памятью в Linux............................................................................................. 114
Организация памяти в Linux............................................................................................. 116
Зависимость от операционной системы........................................................................... 117
NUMA и группы процессоров................................................................................................. 118
Резюме..................................................................................................................................... 120
Правило 2: избегайте произвольного доступа, отдавайте предпочтение  
последовательному............................................................................................................. 120
Правило 3: улучшайте пространственную и временную локальность данных.............. 121
Правило 4: пользуйтесь продвинутыми средствами....................................................... 121
Глава 3. Измерения памяти..................................................................................... 123
Измеряйте как можно раньше................................................................................................ 124
Накладные расходы и вмешательство............................................................................... 125
Выборка и трассировка....................................................................................................... 126
Дерево вызовов................................................................................................................... 126
Графы объектов................................................................................................................... 127
Статистика........................................................................................................................... 129
Задержка и пропускная способность................................................................................. 132
Дампы памяти, трассировка, динамическая отладка...................................................... 133
Среда Windows......................................................................................................................... 134
Краткий обзор..................................................................................................................... 134
VMMap................................................................................................................................. 135
Счетчики производительности.......................................................................................... 136
Трассировка событий для Windows................................................................................... 142
Windows Performance Toolkit.............................................................................................. 152
PerfView............................................................................................................................... 162
ProcDump и DebugDiag....................................................................................................... 171
WinDbg................................................................................................................................. 171
Дизассемблеры и декомпиляторы..................................................................................... 174
BenchmarkDotNet................................................................................................................ 174
Коммерческие инструменты.............................................................................................. 176
Среда Linux.............................................................................................................................. 186
Краткий обзор..................................................................................................................... 186
Perfcollect............................................................................................................................. 187
Trace Compass...................................................................................................................... 189
Дампы памяти..................................................................................................................... 198
Резюме..................................................................................................................................... 199
Правило 5: измеряйте GC как можно раньше................................................................... 201
Глава 4. Фундаментальные основы .NET........................................................ 202
Версии .NET.............................................................................................................................. 202
Детали внутреннего устройства .NET.................................................................................... 205
Разбираем пример программы.......................................................................................... 208
Сборки и домены приложений............................................................................................... 213
Забираемые сборки............................................................................................................ 215
Области памяти процесса....................................................................................................... 216
Сценарий 4.1. Сколько места в памяти занимает моя программа?................................ 220
Сценарий 4.2. Моя программа потребляет все больше и больше памяти...................... 222
Сценарий 4.3. Моя программа потребляет все больше и больше памяти...................... 225
Сценарий 4.4. Моя программа потребляет все больше и больше памяти...................... 227
Система типов......................................................................................................................... 230


8    Содержание
Категории типов................................................................................................................. 231
Хранение типов................................................................................................................... 232
Типы значений.................................................................................................................... 233
Ссылочные типы................................................................................................................. 241
Строки...................................................................................................................................... 246
Интернирование строк....................................................................................................... 252
Сценарий 4.5. Моя программа потребляет слишком много памяти............................... 257
Упаковка и распаковка............................................................................................................ 259
Передача по ссылке................................................................................................................. 264
Передача по ссылке экземпляра типа значений.............................................................. 264
Передача по ссылке экземпляра ссылочного типа........................................................... 265
Локальность типов данных..................................................................................................... 266
Статические данные................................................................................................................ 269
Статические поля................................................................................................................ 269
Внутреннее устройство статических данных................................................................... 270
Резюме..................................................................................................................................... 273
Структуры............................................................................................................................ 274
Классы.................................................................................................................................. 274
Глава 5. Разделение памяти на части............................................................... 277
Стратегии разделения памяти............................................................................................... 278
Разделение по размеру........................................................................................................... 279
Куча малых объектов.......................................................................................................... 280
Куча больших объектов...................................................................................................... 281
Разделение по времени жизни............................................................................................... 284
Сценарий 5.1. Как чувствует себя моя программа? Динамика размеров поколений.... 290
Запомненные наборы (Remembered sets)......................................................................... 292
Таблицы карт (Card tables)................................................................................................. 298
Связки карт.......................................................................................................................... 303
Физическое разделение.......................................................................................................... 306
Сценарий 5.2. Утечка памяти в nopCommerce?................................................................ 311
Сценарий 5.3. Растранжиривание кучи больших объектов?........................................... 319
Анатомия сегментов и кучи............................................................................................... 321
Повторное использование сегментов............................................................................... 324
Резюме..................................................................................................................................... 326
Правило 11: следите за размерами поколений................................................................ 326
Правило 12: избегайте лишних ссылок в куче.................................................................. 327
Правило 13: наблюдайте за использованием сегментов................................................. 328
Глава 6. Выделение памяти.................................................................................... 329
Введение в распределение памяти........................................................................................ 329
Выделение памяти сдвигом указателя.................................................................................. 330
Выделение памяти из списка свободных блоков.................................................................. 337
Создание нового объекта........................................................................................................ 341
Выделение памяти в куче малых объектов....................................................................... 343
Выделение памяти в куче больших объектов................................................................... 347
Балансировка кучи.................................................................................................................. 351
Исключение OutOfMemoryException..................................................................................... 353
Сценарий 6.1. Нехватка памяти......................................................................................... 355
Выделение памяти в стеке...................................................................................................... 356
Избегание выделения памяти................................................................................................ 358


Содержание    9
Явное выделение памяти для ссылочных типов.............................................................. 360
Скрытое выделение памяти............................................................................................... 381
Скрытое выделение памяти в библиотеках...................................................................... 389
Сценарий 6.2. Исследование выделения памяти.............................................................. 393
Сценарий 6.3. Функции Azure............................................................................................ 396
Резюме..................................................................................................................................... 397
Правило 14: избегайте выделения памяти в куче на критических с точки зрения  
производительности участках программы....................................................................... 397
Правило 15: избегайте дорогостоящего выделения памяти в LOH................................ 398
Правило 16: по возможности выделяйте память в стеке................................................. 398
Глава 7. Сборка мусора – введение................................................................... 400
Общее описание...................................................................................................................... 400
Пример процесса сборки мусора............................................................................................ 402
Шаги процесса сборки мусора................................................................................................ 408
Сценарий 7.1. Анализ использования GC.......................................................................... 408
Профилирование GC............................................................................................................... 412
Данные для настройки производительности сборки мусора.............................................. 414
Статические данные........................................................................................................... 414
Динамические данные....................................................................................................... 417
Сценарий 7.2. Демонстрация бюджета выделения........................................................... 419
Инициаторы сборки мусора................................................................................................... 428
Запуск по причине выделения памяти............................................................................. 429
Явный запуск....................................................................................................................... 430
Сценарий 7.3. Анализ явных вызовов GC.......................................................................... 433
Запуск по причине нехватки памяти у системы.............................................................. 439
Запуск по различным внутренним причинам.................................................................. 439
Приостановка движка выполнения....................................................................................... 440
Сценарий 7.4. Анализ времени приостановки GC............................................................ 442
Выбор поколения для сборки................................................................................................. 444
Сценарий 7.5. Анализ выбираемых поколений................................................................ 447
Резюме..................................................................................................................................... 448
Глава 8. Сборка мусора – этап пометки.......................................................... 449
Обход и пометка объектов...................................................................................................... 449
Корни – локальные переменные............................................................................................ 450
Хранилище локальных переменных................................................................................. 451
Корни на стеке..................................................................................................................... 452
Лексическая область видимости........................................................................................ 452
Живые стековые корни и лексическая область видимости............................................. 453
Живые стековые корни с ранней сборкой корней........................................................... 455
Информация для GC (GC Info)............................................................................................ 461
Закрепленные локальные переменные............................................................................ 465
Просмотр стековых корней................................................................................................ 468
Корни финализации................................................................................................................ 468
Внутренние корни GC............................................................................................................. 469
Корни – описатели GC............................................................................................................. 470
Анализ утечек памяти............................................................................................................. 476
Сценарий 8.1. Утечка памяти в nopCommerce?................................................................ 478
Сценарий 8.2. Нахождение самых популярных корней................................................... 482
Резюме..................................................................................................................................... 484


10    Содержание
Глава 9. Сборка мусора – этап планирования............................................. 485
Куча малых объектов............................................................................................................... 486
Заполненные и пустые блоки............................................................................................. 486
Сценарий 9.1. Дамп памяти с поврежденными структурами......................................... 491
Таблица кирпичей.............................................................................................................. 492
Закрепление........................................................................................................................ 494
Сценарий 9.2. Исследование закрепления........................................................................ 499
Границы поколений............................................................................................................ 504
Оставление.......................................................................................................................... 504
Куча больших объектов........................................................................................................... 509
Заполненные и пустые блоки............................................................................................. 509
Принятие решения об уплотнении........................................................................................ 511
Резюме..................................................................................................................................... 512
Глава 10. Сборка мусора – очистка и уплотнение.................................... 513
Этап очистки............................................................................................................................ 513
Куча малых объектов.......................................................................................................... 513
Куча больших объектов...................................................................................................... 514
Этап уплотнения..................................................................................................................... 515
Куча малых объектов.......................................................................................................... 515
Куча больших объектов...................................................................................................... 519
Сценарий 10.1. Фрагментация кучи больших объектов................................................... 520
Резюме..................................................................................................................................... 528
Правило 17: следите за приостановкой среды выполнения............................................ 529
Правило 18: избегайте кризиса среднего возраста.......................................................... 529
Правило 19: избегайте фрагментации старого поколения и LOH................................... 530
Правило 20: избегайте явной сборки мусора................................................................... 531
Правило 21: избегайте утечек памяти............................................................................... 531
Правило 22: избегайте закрепления................................................................................. 532
Глава 11. Варианты сборки мусора.................................................................... 533
Обзор режимов........................................................................................................................ 533
Режим рабочей станции и серверный режим................................................................... 533
Неконкурентный и конкурентный режим........................................................................ 535
Конфигурирование режимов.................................................................................................. 536
.NET Framework................................................................................................................... 537
.NET Core.............................................................................................................................. 537
Приостановка и накладные расходы GC................................................................................ 538
Описание режимов.................................................................................................................. 540
Неконкурентный режим рабочей станции....................................................................... 541
Конкурентный режим рабочей станции (до версии 4.0).................................................. 542
Фоновый режим рабочей станции..................................................................................... 544
Неконкурентный серверный режим.................................................................................. 552
Фоновый серверный режим............................................................................................... 554
Режимы задержки................................................................................................................... 556
Пакетный режим................................................................................................................. 556
Интерактивный режим....................................................................................................... 557
Режим низкой задержки..................................................................................................... 557
Режим длительной низкой задержки................................................................................ 558
Регион без сборки мусора (No GC Region)......................................................................... 559
Цели оптимизации задержки............................................................................................ 562


Доступ онлайн
1 899 ₽
В корзину