Сборка мусора и внешние вызовы
Сборка мусора и внешние вызовы
Хорошо спроектированная ОО-среда со сборкой мусора должна решать еще одну практическую проблему. Во многих случаях ОО-программы взаимодействуют с программами, написанными на не ОО-языках. В следующих лекциях будет рассмотрено, как лучше обеспечить такое взаимодействие. (См. "Взаимодействие с не ОО-программой", лекцию 13)
Если ПО включает вызовы подпрограмм, написанных на других языках (называемых далее внешними программами), возможно, этим подпрограммам необходимо будет передавать ссылки на объекты. Это потенциально опасно для управления памятью. Предположим, что внешняя подпрограмма имеет следующий вид (преобразованная в соответствии с синтаксисом языка внешней программы):
r (x: SOME_TYPE) is
do
...
a := x
...
end
где a сущность, сохраняющая значение между последовательными вызовами r. Например, а может быть глобальной или статической переменной в традиционных языках, или атрибутом класса в нашей ОО-нотации. Рассмотрим вызов r(y), где y связан с некоторым объектом О1. Возможно, что через некоторое время после вызова, О1 становится недостижимым в объектной части нашей программы, но ссылка на него (от сущности a) остается во внешней программе. Сборщик мусора может - и в конце концов должен - утилизировать О1, но в данном случае это неправильно.
Для таких ситуаций необходимы процедуры, вызываемые из внешней программы, которые защитят нужный объект от сборщика. Эти процедуры могут быть названы:
adopt (a) - усыновлять
wean (a) - отнимать от груди, отлучать
и должны быть частью интерфейса любой библиотеки, обеспечивающей взаимодействие ОО-программ и внешних программ. В следующем разделе описан подобный механизм для языка С. "Усыновление" объекта забирает его из области действия механизма утилизации; "отлучение" - возвращает возможность утилизации.
Передача объектов в не ОО-языки и удерживание ссылки на них внешней программой - дело рискованное. Но избежать этого возможно не всегда. Например, ОО-проект нуждается в специальном интерфейсе между ОО-языком и имеющейся системой управления БД. В этом случае, можно разрешить внешней программе сохранять информацию об объектах. Такие низкоуровневые манипуляции никогда не должны появляться в нормальном программном продукте. Они должны содержаться в обслуживающем классе, написанном с единственной целью - скрыть детали от остальной части программы и защитить ее от возможных неприятностей.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Совет 5: Почта без мусора
Совет 5: Почта без мусора Возможность обратиться к каждому жителю планеты с проникновенными словами и выгодным коммерческим предложением — голубая мечта некоторых работников рекламной индустрии, которая стала реальностью благодаря электронной почте. В наше время с
Совет 44: Программы без мусора
Совет 44: Программы без мусора А теперь хорошая новость: почти всегда установку сопутствующего барахла можно отменить в установщике исходной программы, нужно лишь изменить его настройки. Потому во время установки любого приложения стоит читать появляющиеся на экране
6.4.4. Критерий «мусора» (Unclean match)
6.4.4. Критерий «мусора» (Unclean match) Критерий unclean не имеет дополнительных ключей и для его использования достаточно явно загрузить модуль. Будьте осторожны, данный модуль находится еще на стадии разработки и поэтому в некоторых ситуациях может работать некорректно. Данная
Сборка мусора
Сборка мусора Как видите, при использовании многоверсионной архитектуры постоянно накапливаются устаревшие версии, называемые "мусором". Эти версии не являются актуальными и подлежат удалению. Процесс удаления ненужных версий записей называется сборкой
1.4.4 Сборка мусора
1.4.4 Сборка мусора Управлять памятью на низком уровне трудно и чревато ошибками, особенно в таком динамичном окружении, какое создает Ruby. Наличие механизма сборки мусора — весомое преимущество. В таких языках, как C++, за выделение и освобождение памяти отвечает
Активизация сборки мусора
Активизация сборки мусора Итак, сборщик мусора в .NET призван управлять памятью за вас. Однако в очень редких случаях, перечисленных ниже, бывает выгодно программно активизировать начало сборки мусора, используя дня этого GC.Collect().• Перед входом приложения в блок
Фоновая сборка мусора
Фоновая сборка мусора Для ограничения такого разрастания Firebird постоянно выполняет сборку мусора (garbage collection) на фоне активности базы данных.Фоновая сборка мусора ничего не делает с устаревшими версиями записей, которые относятся к незавершенным транзакциям - они не
Сборка мусора в процессе резервного копирования
Сборка мусора в процессе резервного копирования Чистка базы данных не является единственным способом систематической сборки мусора. Резервное копирование базы данных дает тот же результат, потому что сервер Firebird должен читать каждую запись. Это дает возможность
Сборка мусора
Сборка мусора Firebird выполняет сборку мусора в фоновом режиме для ограничения роста базы данных из-за устаревших версий записей. Сборка мусора освобождает память, отведенную устаревшим версиям строк, насколько это возможно, после освобождения строк транзакциями, их
Управление памятью (memory management) и сборка мусора (garbage collection)
Управление памятью (memory management) и сборка мусора (garbage collection) Может показаться, что этот критерий метода и языка должен принадлежать к следующей категории - реализации и среде. На самом деле он принадлежит к обеим категориям. Важнейшие требования предъявляются к языку,
Сборка мусора
Сборка мусора Наиболее общей и полностью удовлетворительной техникой является лишь автоматическая сборка мусора или просто сборка
Механизм сборки мусора
Механизм сборки мусора Сборщик мусора (garbage collector) - это функция исполнительной системы (runtime system) языка программирования. Сборщик мусора выполняет обнаружение и утилизацию недостижимых объектов, не нуждаясь в управлении приложением, хотя приложение может иметь в своем
Основа сборки мусора
Основа сборки мусора Рассмотрим работу сборщика мусора.Основной алгоритм включает две фазы: пометка и чистка. Фаза пометки, начиная с оригиналов, рекурсивно следует ссылкам, проходит активную часть структуры и помечает как достижимые все встреченные объекты. Фаза
Механизм сборки мусора
Механизм сборки мусора Приведем схему алгоритма, используемого сборщиком мусора.Решение представляет собой не единственный алгоритм, а основано на комбинации основных алгоритмов, часть из которых используется совместно, часть - независимо друг от друга. Каждая
Операции сборщика мусора
Операции сборщика мусора Сборщик мусора включается одной из двух требующих память операций: инструкцией создания ( create x ) или клонирования. Сборщик запускается не только, когда программе не хватает памяти: механизм может активизироваться, когда он определяет некоторые
Удаление мусора
Удаление мусора Не хватает места на диска С: и Windows постоянно вам об этом напоминает? Откройте Мой компьютер, щелкните правой кнопкой мыши на диске C:, выберите команду Свойства, а в появившемся окне нажмите кнопку Очистка диска. В окне Очистка диска (рис. 8.3) выбираем Все и