Main Page News Fy++ samples Video Files Contact Me
Articles
  • Кремль со спутника
  • Представление цвета
  • Сравнение цветов
  • Детектор движения
  • Сборщик мусора

  • Сборщик мусора

    Нашел интересую статью о том, как организовано удаление старых объектов (мусора) в Java - www.brpreiss.com.

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

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

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

    Взамен я недавно придумал абсолютно другой способ, по смыслу похожий на технологию client/server. Суть в том, что у каждого объекта может быть всего лишь один хозяин (server), но множество пользователей (clients). Когда хозяин удаляется, все его дочерние объекты - также идут в корзину вслед за ним. Объект может и не иметь родителя, к примеру, если это автоматическая переменная, созданная внутри процедуры; но если к концу текущей транзакции его никто не "усыновит", то такой объект автоматом удаляется.

    Такая организация имеет множество интересных свойств, например:

    1. Все объекты системы организованы в дерево объектов, которое удобно анализировать и что более естественно для восприятия, чем переплетенная сеть.
    2. Такое дерево или часть его удобно сохранять в поток (serialize).
    3. В системе существуют два, а не один тип ссылок на объекты: равноправная и родительская, дающая ряд привилегий (это отдельная интересная тема).
    4. Любой объект может получить ссылку на своего родителя.
    5. Объекты удаляются сразу, а не большими группами, что часто взывает задержки на Java и расходует кучу памяти.

    Вобщем, осталось реализовать и обдумать синтаксическую обертку на языке, что почти сделано.

    Articles & posts
    Кремль со спутникаВид со спутника на несколько известных мест. Карты maps.google.com.
    Представление цветаПринцип разложения цветов на составляющие для удобного их сравнения. Существующие два олсновных формата представления цвета.
    Сравнение цветовСоображения по поводу возможного алгоритма сравнения цветов.
    Детектор движенияОбщие соображения насчет алгоритма обнаружения движения.
    Сборщик мусораАльтернатива стандартному алгоритму сборщика мусора, используемому в java.

    Copyright (c) Sapunov Vladimir 2006-2008 e-mail: vladimir@fyzor.com :: login