Mark-and-Sweep против автоматического подсчета ссылок

Как мы все знаем, JVM HotSpot использует параллельный маркер и синтаксис G arbage C, чтобы освободить неиспользуемые объекты в куче. Это полезно в том смысле, что программистам не нужно заботиться о памяти при создании своих программ, но поставляется со случайным "GC lag", который освобождает все неиспользуемые объекты.

Кроме того, новый язык программирования Swift также использует автоматическую систему управления памятью, называемую ARC, которая работает с A utomatic R e C., Проблема с подобной сборкой мусора - это циклические ссылки, которые нужно специально программировать с помощью weak и unowned ссылок, чтобы избежать утечек памяти.

Но есть ли другие существенные различия между ними? В каких сценариях лучше или хуже других?