Сборщик мусора
Нашел интересую статью о том, как организовано удаление старых объектов (мусора) в Java - www.brpreiss.com.
Вкратце: периодически сканируются все статические объекты (т.е. находящиеся в поле видимости программы) и помечаются временной меткой "checked". То же самое делается для всех их дочерних объектов. В результате не помеченными остаются лишь те объекты, доступ к которым потерян из программы, т.е. мусор. Он и удаляются.
В этом алгоритме счетчик ссылок не используется вообще, так как он НЕ предотвращает циклические ссылки (в статье об этом есть).
Идея такого сборщика приходила в свое время и мне, но я от нее отказался, так как мой интерпретатор поддерживает работу с объектами из низкоуровневых процедур, например, на языке Си. Пришлось бы для каждого такого объекта писать процедуру "переклички" всех его потомков, что, во-первых, чревато ошибками и утечками памяти, а во-вторых, это лишняя работа для пользователя, как по изучению, так и по реализации механизма.
Взамен я недавно придумал абсолютно другой способ, по смыслу похожий на технологию client/server. Суть в том, что у каждого объекта может быть всего лишь один хозяин (server), но множество пользователей (clients). Когда хозяин удаляется, все его дочерние объекты - также идут в корзину вслед за ним. Объект может и не иметь родителя, к примеру, если это автоматическая переменная, созданная внутри процедуры; но если к концу текущей транзакции его никто не "усыновит", то такой объект автоматом удаляется.
Такая организация имеет множество интересных свойств, например:
- Все объекты системы организованы в дерево объектов, которое удобно анализировать и что более естественно для восприятия, чем переплетенная сеть.
- Такое дерево или часть его удобно сохранять в поток (serialize).
- В системе существуют два, а не один тип ссылок на объекты: равноправная и родительская, дающая ряд привилегий (это отдельная интересная тема).
- Любой объект может получить ссылку на своего родителя.
- Объекты удаляются сразу, а не большими группами, что часто взывает задержки на Java и расходует кучу памяти.
Вобщем, осталось реализовать и обдумать синтаксическую обертку на языке, что почти сделано.
| Articles & posts |
|---|
| Кремль со спутника | Вид со спутника на несколько известных мест. Карты maps.google.com.
|
|---|
| Представление цвета | Принцип разложения цветов на составляющие для удобного их сравнения. Существующие два олсновных формата представления цвета.
|
|---|
| Сравнение цветов | Соображения по поводу возможного алгоритма сравнения цветов.
|
|---|
| Детектор движения | Общие соображения насчет алгоритма обнаружения движения.
|
|---|
| Сборщик мусора | Альтернатива стандартному алгоритму сборщика мусора, используемому в java.
|
|---|
|