1.2.4. СБОРКА МУСОРА

В языке Рефал Плюс имеется возможность порождать объекты во время работы программы, но не предусмотрено никаких специальных средств для явного уничтожения объектов. Таким образом, может случиться так, что в процессе выполнения Рефал-программы память будет заполняться все новыми и новыми объектами, хотя многие из них будут уже и не нужны. Конечно, теоретически это не создает никаких проблем, однако, поскольку Рефал-программы исполняются с помощью реальных компьютеров, память которых конечна, во всех реализациях языка Рефал предусмотрен механизм сборки мусора.

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

На рисунке 2.1 схематически изображены значения переменных, а также объекты и их содержимое. Звездочки изображают некоторые элементы выражений, которые не являются символами-ссылками. Для удобства изложения, все объекты на рисунке пронумерованы. Символы-ссылки обозначены цифрами.

Видно, что по ссылке из значения одной из переменных можно добраться до объекта 1, и из него - до объекта 4. По ссылке из значения другой переменной можно непосредственно добраться до объекта 2 и косвенно (через объект 2) до объектов 4, 5, 6, 3. Таким образом, нет способа извлечь информацию из объектов 7 и 8. Если в этот момент запустить сборку мусора, то объекты 7 и 8 будут уничтожены. Если теперь убрать ссылку на объект 1 из значения переменной, то станет недоступным и объект 1. Если же ссылку на объект 1 оставить, но убрать ссылку на объект 2 из значений переменных, то окажутся ненужными все объекты, кроме 1 и 4.

Рис.2.1. Объекты и ссылки.

ЗНАЧЕНИЯ ПЕРЕМЕННЫХ:
[* * 1 * * * * * * 2 * * * * *]
1:[* * * 4]
2:[4 * * 5]
3:[* * 5]
4:[* * *]
5:[* 6 * 3]
6:[* * 4 *]
7:[3 * 8]
8:[* 7]