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

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

Завершение объектов в среде .NET. Метод Finalize. Список завершаемых объектов (finalization queue) и очередь завершения (freachable queue).

Читайте также:
  1. A) Метод обучения.
  2. A) определение спроса на товар, оценка издержек производства, выбор метода ценообразования, установление окончательной цены
  3. A. метод абсорбции
  4. C) Методы исследования
  5. C.) К специфическим задачам, которые используются в ходе реализации частично-поисковых методов на уроке технологии, относятся
  6. D)практических методов.
  7. Hs-СРБ – высокочувствительный метод измерения концентрации СРБ.
  8. I. Назначение методических рекомендаций
  9. I. Общеметодологические (общесистемные) принципы.
  10. I. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЙ РАЗДЕЛ

Методы Finalize вызываются при завершении сбора мусора, который происходит в результате одного из пяти следующих событий.

■ Заполнение поколения 0приводит к запуску сборщика мусора. Это собы­тие намного чаще остальных приводит к вызову метода Finalize, так как явля­ется естественным следствием создания новых объектов во время работы кода приложения.

■ Явный вызов статического метода Collect объекта System.GC Код может явно запросить сбор мусора у CLR. Хотя Microsoft настоятельно не рекоменду­ет так поступать, порой принудительный сбор мусора имеет смысл.

■ Windows сообщает о нехватке памятиДля общего мониторинга систем­ной памяти CLR использует Int32-функции CreateMemoryResourceNotification и QueryMemoryResourceNotification. Если Windows сообщает о нехватке памя­ти, CLR запускает сбор мусора, чтобы освободить нерабочие объекты и умень­шить рабочий набор процесса.

■ Выгрузка домена приложения CLRВыгружая домен приложения, CLR счи­тает, что ни один объект в нем не является корнем, и выполняет сбор мусора всех поколений.

■ Закрытие CLRCLR завершает работу после нормального завершения рабо­ты процесса (в отличие от внешнего завершения, например диспетчера задач). При этом CLR считает, что в процессе нет корней, и вызывает метод Finalize для всех объектов в управляемой куче. Учтите, что CLR не пытается сжать или освободить память, потому что процесс завершается, a Windows освобождает всю занятую им память.

CLR использует особый выделенный поток для вызова методов Finalize. В слу­чае первых четырех событий, если метод Finalize зацикливается, выделенный по­ток блокируется и вызов методов Finalize прекращается. Это очень плохо, потому что приложение не сможет освободить память, занятую объектами, у которых есть метод Finalize, и в итоге будет испытывать нехватку памяти.

В случае пятого события каждому методу Finalize дается примерно 2 секунды на то, чтобы вернуть управление программе. Если он не успевает, CLR просто за­вершает процесс и методы Finalize больше не вызываются. А если для вызова ме­тодов Finalize всех объектов требуется более 40 секунд, CLR также просто завер­шит процесс.

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

Сборщик сканирует список завершения в поисках указателей на эти объекты. Обнаружив указатель, он удаляет его из списка завершения и добавляет в конец очереди freachable — еще одной внутренней структуры данных сборщика мусо­ра. Каждый указатель в этой очереди идентифицирует объект, готовый к вызову своего метода Finalize.

 




Дата добавления: 2015-01-30; просмотров: 15 | Нарушение авторских прав

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <== 11 ==> | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |


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