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