Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Автоматическое управление памятью .NET Framework

Читайте также:
  1. Almida FINANCE LTD УПРАВЛЕНИЕ АКТИВАМИ КЛИЕНТОВ СОГЛАШЕНИЕ
  2. I. Территориальное управление Роспотребнадзора
  3. III. Управление системой туризма и туристской деятельности. Государственное регулирование туризма и туристской деятельности в Российской Федерации
  4. LINUX|| Управление памятью в ОС Linux. Карта памяти
  5. Lt;variant>управление различного рода естественными и технологическими процессами
  6. Rome. Но управление все же похуже.
  7. V2:Управление оборотным капиталом предприятия
  8. А есть ВЕРА и управление реальностью тоже интересно. ))) НЕгоже Комуто Нами Управлять!!!
  9. Автоматическое включение резервных линий.
  10. Автоматическое управление насосным агрегатом

Концепция автоматического управления памятью предусматривает непрерывную работу соответствующей службы над оптимизацией занятой памяти и освобождением памяти от объектов, которые должны быть уничтожены. Кроме этого, служба автоматического управления памятью отвечает за предотвращение ошибок, связанных с доступом к несуществующим (уничтоженным) объектам.

Память для управляемых данных распределяется и освобождается автоматически. Такое автоматическое освобождение занимаемой памяти называется сборкой мусора (garbage collection). Сборка мусора решает все проблемы утечки памяти.

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

Если в момент создания процесса указатель управляемой кучи устанавливается на базовый адрес кучи, то есть в начало, то после создания каждого нового объекта и размещения его в куче, указатель устанавливается на адрес конца этого объекта. Выделением памяти для объекта и, соответственно, перемещением указателя, занимается специальная служба – сборщик мусора.

При создании еще одного объекта память для него выделяется сразу после уже созданного, а указатель снова перемещается на конец вновь добавленного объекта. Так продолжается до тех пор, пока выделенный диапазон адресов не будет исчерпан. Это последовательное выделение адресов очень похоже на работу стека, и такой «стековый» способ доступа к памяти дает выигрыш в эффективности.

Служба сборки мусора является оптимизирующей, т.е. используя данные о выделенной памяти, сборщик мусора производит освобождение памяти от уничтоженных объектов и оптимизацию распределения освободившейся памяти.

Для очистки памяти сборщик мусора использует так называемые корневые записи приложения. Каждая корневая запись приложения несет в себе указатель на объект определенного типа, размещенный в управляемой куче, или содержит запись null.

Объекты, ссылка на которые получает значение null, становятся нечитаемыми для приложения и попадают в разряд «мусора». Набор корневых записей приложения создается и управляется компилятором и CLR. Сборщик мусора, анализируя набор корневых записей, создает для себя специальную таблицу, которая содержит информацию обо всех активных корневых записях приложения, выделенной для них памяти и о свободной памяти в куче. Когда сборщик мусора обнаруживает в куче занятую память, которая не принадлежит активному объекту, он считает эту память заполненной «мусором» и подлежащей освобождению.

После обнаружения неиспользуемой области памяти сборщик мусора заполняет неиспользуемый диапазон адресов активными объектами и делает общую активную память кучи непрерывной. Указатель кучи после сжатия памяти перемещается сборщиком мусора в конец непрерывной активной области памяти, а адреса всех указателей на объекты в корневых записях корректируются в соответствии с новым положением объектов.

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

Управляемая куча представляет собой непрерывный диапазон адресов, но она разбита на три поддиапазона адресов, которые носят название генераций. В управляемой куче генерации обозначаются цифрами 0, 1 и 2. Статистические исследования выявили некоторые тенденции поведения объектов в куче и закономерности, на основе которых была разработана концепция генераций:

– часть кучи сжимается быстрее, чем вся куча;

– новые объекты живут меньше, чем давно созданные;

– новые объекты ведут себя активнее, т.е. устанавливают больше связей друг с другом, чем давно созданные.

Таким образом, размещая новые объекты в генерации 0, объекты «среднего возраста» в генерации 1, а «старые» объекты в генерации 2, сборщик мусора имеет возможность часто сжимать только генерацию 0. Сжатие генерации 1 происходит на порядок реже, сжатие генерации 2 – еще на порядок реже. Это гораздо более производительно, чем сжатие всей кучи целиком.

По умолчанию сборщик «мусора» производит уборку мусора в тот момент, когда любая из генераций переполняется. Поскольку все вновь созданные объекты помещаются в генерацию 0, то она переполняется чаще других и в ней чаще происходит уборка. Если после уборки мусора в генерации 0 не хватает места для размещения вновь создаваемых объектов, более старые объекты из этой генерации перемещаются в генерацию 1. Когда переполняется генерация 1, сборщик мусора действует с ней по такому же алгоритму.




Дата добавления: 2015-01-05; просмотров: 48 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав