бывают алгоритмы, которые находят и освобождают циклы. Работают они примерно так: каждый раз когда счётчик умного указателя декрементируется, этот указатель добавляется в «список указателей, которые могут входить в циклы».
Периодически из всех указателей в этом списке запускается поиск в глубину, который находит и удаляет циклы.
Существует даже многопоточный вариант, который не требует остановки всех потоков.
2001, IBM, A Pure Reference Counting Garbage Collector

a paper by Eiffel implementers that were trying to implement a Reference Counting Garbage Collector that would have a similar global performance to Mark And Sweep without the "Freeze The World" aspect. It required a separate thread for the GC (typical).
Bertrand Meyer

http://managedcpp.sourceforge.net/

There are currently 2 families of GC that are widely deployed:
    Mark-And-Sweep kind
    Reference-Counting kind

reference-counting adds overhead, especially in Multi-Threading environments because you need to have an atomic count.

programs, based on testing with Java, will probably require around six times as much memory to run at the same speed they do now.

Отредактировано Лис (2017-07-10 21:53:05)