Позволит ли использование подсчета ссылок обеспечить гарантии детерминизма, которые невозможны для сборщика мусора?
Слово гарантия является сильным. Вот гарантии, которые вы можете предоставить при подсчете ссылок:
Постоянные накладные расходы времени при назначении для настройки счетчиков ссылок.
Постоянное время для освобождения объекта, чей счетчик обращений обнуляется. (Ключ в том, что вы не должны сразу уменьшать дочерние объекты этого объекта; вместо этого вы должны делать это лениво , когда объект используется для удовлетворения будущего запроса на выделение.)
Постоянное время для выделения нового объекта , когда соответствующий свободный список не пуст . Эта гарантия условна и не стоит много.
Вот некоторые вещи, которые вы не можете гарантировать при подсчете ссылок:
Постоянное время для выделения нового объекта. (В худшем случае, куча может расти, и в зависимости от системы задержка для организации новой памяти может быть значительной. Или даже хуже, вы можете заполнить кучу и быть не в состоянии выделить.)
Все недоступные объекты возвращаются и используются повторно, сохраняя постоянное время для других операций. (Стандартный счетчик ссылок не может собирать циклический мусор. Существует множество оригинальных обходных путей, но обычно они делают недействительными гарантии постоянного времени для простых операций.)
В настоящее время существуют некоторые сборщики мусора в реальном времени, которые предоставляют довольно интересные гарантии относительно времени паузы, и за последние 5 лет произошли довольно интересные разработки как в подсчете ссылок, так и в сборке мусора. С того места, где я сижу как информированный аутсайдер, очевидного победителя нет.
Одной из лучших последних работ по подсчету ссылок являются Дэвид Бэкон из IBM и Эрез Петранк из Technion. Если вы хотите узнать, на что способна современная сложная система подсчета ссылок, посмотрите их документы. Помимо всего прочего, они удивительным образом используют несколько процессоров.
Более подробную информацию об управлении памятью и гарантиях в реальном времени можно получить на Международном симпозиуме по управлению памятью .
Будет ли другой ответ на этот вопрос для функциональных и императивных языков?
Потому что вы спросили о гарантиях , нет. Но для управления памятью в целом компромиссы производительности весьма различны для императивного языка (много мутаций, но низкая скорость выделения), нечистого функционального языка (почти нет мутаций, но высокая скорость выделения) и чистого ленивого функционального языка (много мутации & mdash; все эти мысли обновляются & mdash; и высокие показатели распределения).