prodotnetmemory.github.io

Предисловие

Второе издание
Пространство памяти постоянно развивается. К менеджерам памяти предъявляются жесткие требования по повышению эффективности использования памяти. Это может означать обработку более напряженных рабочих нагрузок с меньшим объемом памяти, достижение предсказуемых размеров, минимизацию прерываний от менеджеров памяти и решение многих других проблем. Способ запуска служб изменился довольно кардинально. Учитывая растущую распространенность контейнеризированных сред, на менеджеров памяти оказывается большее давление, чтобы они были более адаптивными к ним. Диагностика также стала более сложной по многим причинам, включая трудности с доступом к процессам, для которых вы хотите исследовать проблемы с памятью.

.NET работает в широком диапазоне сценариев, что означает, что мы постоянно вносим улучшения в сборщик мусора. Со времени первого издания этой книги было внесено много изменений. Например, физическое представление кучи GC изменилось с сегментов на регионы, которые являются гораздо меньшими единицами памяти с очень разными характеристиками производительности, которые позволяют лучше использовать память в куче и инновациями, которые были сложны с сегментами. Второе издание этой книги - единственная книга, о которой я знаю на сегодняшний день, которая рассказывает об этом важном изменении.

Диагностика проблем с памятью - нетривиальная задача. Обычные инструменты для работы с памятью обычно анализируют снимки памяти, чтобы предоставить вам график кучи или список объектов с их типами и размерами. Но проблемы с памятью часто не являются проблемами на определенный момент времени - вам нужно посмотреть историю, чтобы понять, как возникла ситуация с кучей. PerfView, расширенный инструмент, предоставленный командой .NET runtime, предлагает историческое представление сборок мусора, произошедших в ваших процессах, с обширной информацией о производительности этих сборок мусора. Во второе издание было добавлено больше примеров использования PerfView, что делает его еще более полезным для диагностики сложных проблем.

Я думаю, что те, кому понравилось первое издание, оценят новый контент в этом издании. И для каждого, кто хочет получить книгу, чтобы понять, как работает .NET GC или как оптимизировать использование памяти или диагностировать проблемы с памятью в .NET, я настоятельно рекомендую эту книгу.

Маони Стивенс июнь 2024

Первое издание
Когда я присоединился к команде Common Language Runtime (среда выполнения для .NET) более десяти лет назад, я и не подозревал, что этот компонент под названием Garbage Collector станет тем, о чем я буду думать большую часть своей жизни. Среди первых нескольких людей, с которыми я работал в команде, был Патрик Дюссуд, который был и архитектором, и разработчиком CLR GC с момента его создания. После наблюдения за моей работой в течение месяцев он передал мне эстафету, и я стал вторым выделенным разработчиком GC для CLR.

И так началось мое путешествие в GC. Вскоре я обнаружил, насколько увлекателен мир сборки мусора - я был поражен сложными и обширными проблемами в GC и мне понравилось придумывать эффективные решения для них. Поскольку CLR использовалась во все большем количестве сценариев все большим количеством пользователей, а память была одним из важнейших аспектов производительности, в области управления памятью продолжали возникать новые проблемы. Когда я только начинал, было нечасто увидеть кучу GC даже размером 200 МБ; сегодня куча в 20 ГБ - совсем не редкость. Некоторые из самых больших рабочих нагрузок в мире выполняются в CLR. Как лучше управлять памятью для них - это, без сомнения, захватывающая проблема.

В 2015 году мы открыли исходный код CoreCLR. Когда об этом было объявлено, сообщество спросило, будет ли исходный код GC исключен из репозитория CoreCLR - справедливый вопрос, поскольку наш GC включал множество инновационных механизмов и политик. Ответом было решительное «нет», и это был тот же код GC, который мы использовали в CLR. Это явно привлекло некоторые любопытные умы. Год спустя я был рад узнать, что один из наших клиентов планирует написать книгу специально о нашем GC. Когда технологический евангелист из нашего польского офиса спросил меня, смогу ли я сделать обзор книги Конрада, я, конечно, сказал «да»!

Когда я получил главу от Конрады, мне стало ясно, что он привел наш код GC с большим усердием. Я был очень впечатлен подробностями. Конечно, вы можете собрать CoreCLR и пройти по код GC самостоятельно. Но эта книга, безусловно, облегчит вам задачу. И поскольку важная группа читатели этой книги - пользователи GC, Конрад включил много материала, чтобы лучше понять поведение GC и шаблоны кодирования для более эффективного использования GC. В начале книги также есть фундаментальная информация о памяти, а ближе к концу - обсуждение использования памяти в различных библиотеках. Я думаю, что это идеальный баланс между внедрением в GC, внешним источником и использованием.

Если вы используете .NET и заботитесь о производительности памяти, или если вам просто интересно узнать о .NET GC и вы хотите понять его внутреннюю работу, эта книга для вас. Надеюсь, вы получите столько же удовольствия от ее чтения, сколько я получил от ее обзора.

Маони Стивенс Июль 2018