В Mozilla XPCOM реализован подход Бэкона , и этот в некоторой степени может быть перенесен в WinRT при необходимости.Вообще, избегать трассировки сборщика мусора - это хорошо.У разработчиков все еще есть множество способов утечки памяти , поэтому лучше не впадать в заблуждение.Кроме того, с точки зрения контроля циклическое владение не имеет смысла.Это похоже на то, как Мюнхгаузен вырывает себя из болота своими собственными волосами и держит себя в воздухе.Должна быть причина существования каждого объекта, и подсчет ссылок является проявлением этой причины.Еще одним проявлением является право на изменение, что приводит к созданию надежных методов копирования при записи, сильно зависящих от доступности счетчика ссылок.В средах, имеющих только трассирующую сборку мусора, нужно либо выполнить глубокое копирование изменяемых структур данных, чтобы защитить их от нежелательных мутаций, либо использовать неизменные структуры данных с большими штрафами за небольшие глубокие изменения.Или конвертируйте изменяемые и неизменяемые структуры данных туда и обратно.Кроме того, было подсчитано, что трассировка сборки мусора работает нормально только при наличии 5-кратной необходимой оперативной памяти (глубоко скопированные реплики не учитываются).Для сравнения, консервативные распределители используют в 2 раза больше необходимой оперативной памяти (из-за фрагментации).Не обманывайте себя: копирование сборщика мусора только ускоряет распределение, но тратит в 2,5 раза больше оперативной памяти, чем консервативный сборщик мусора с подсчетом ссылок, для достижения сопоставимой производительности.
Посмотрите на Apple.Они внедрили TGC в Objective-C 2.0 в качестве дополнительной функции, но затем устарели, и тонны приложений для iPhone живут без этого довольно хорошо.Айфоны славятся отличным пользовательским интерфейсом и длительным зарядом аккумулятора.Windows 10 зависает как ад на моем ПК с 4 ГБ ОЗУ, в то время как Mac OS X 10.4.10 Хакинтош работал довольно гладко на 1 ГБ ОЗУ.Может быть, это как-то связано, тебе так не кажется?Возможно, где-то случайно произошла утечка памяти, но, в конце концов, это трудно заметить по сравнению с зависаниями и огромным потреблением ОЗУ.
Огромное потребление ОЗУ приводит к тому, что программы переключаются на диск, и если они переключаются на диск, а затем начинают отслеживать мусорсбор, замененные страницы возвращаются обратно в оперативную память, а перемещение замененных страниц обратно в оперативную память происходит довольно медленно.Кроме того, при этом страницы других приложений должны быть выгружены в файл подкачки.Как мы знаем, приложения для трассировки мусора используют в 2,5 раза больше оперативной памяти, поэтому у этих приложений в 2,5 раза больше шансов перейти на подкачку.Внезапно другое приложение также запустит сборку мусора и будет вынуждено вернуть страницы в оперативную память, вытесняя страницы других приложений.И это идет и идет как вечный двигатель наоборот.Обычный вечный двигатель бесконечно генерирует энергию из воздуха, а вечный двигатель наоборот бесконечно тратит энергию впустую.Отслеживание сбора мусора - это алгоритм, который никогда не заканчивается.Время от времени он запускается эвристически, и известно только, когда это будет сделано, если ему повезет.Может быть, в этот раз нам повезет что-то собрать, может быть, во второй раз, может быть, в третий раз.Вы покидаете компьютер на долгое время в надежде, что он, в конце концов, сделает свое дело и, наконец, позволит вам работать, но этот бизнес никогда не заканчивается.Внезапно два приложения запускают трассировку мусора одновременно и начинают конкурировать за незанятую оперативную память.При трассировке сборки мусора, вероятно, будет несколько последовательных обращений к одной и той же странице, поэтому одна страница может переходить в своп и обратно несколько раз.В офисных средах только компьютер босса, вероятно, имеет много оперативной памяти, другие компьютеры стоят как можно дешевле.Кроме того, антивирус принудительно развертывается на каждом офисном ПК, и сотрудники офиса не могут от него избавиться.Антивирус сохраняет оперативную память для подписей в памяти, делая ее еще более разреженной, а также проверяет каждый ввод-вывод, включая файлы подкачки, замораживающиеся до полного безумия.Вот где ад на Земле.
Я спросил адвокатов по отслеживанию мусора, могут ли они наблюдать зависания, как я, и оказывается, что они помещают много памяти в свои ПК (например, 16 Гб на ноутбуке !!!), используют ее в однопользовательском режиме,и сборка мусора для них работает нормально.Черт возьми, им придется работать со своими разработками на самых дешевых офисных ПК с принудительно развернутым антивирусом.
Поэтому я предлагаю вам не смотреть только на проблему сбора циклов.Научитесь любить подсчет ссылок, НАСЛАЖДАЙТЕСЬ ЭТОМ и заставляйте пользователей наслаждаться вашими тонкими программами.Сделайте большую часть подсчета ссылок.Надежное копирование при записи для вложенных структур.Пулы соединений с базой данных с обернутыми соединениями, где соединения возвращаются в пул немедленно, когда на их оболочку больше не ссылаютсяПрозрачность сети.RAII.
А если у вас действительно нет других вариантов, позаимствуйте у Mozilla XPCOM.Кстати, в ОС Windows Mozilla XPCOM сообщается, что ABI идентичен Microsoft COM, но не уверен.