The vast majority of resources are short-lived and don't create cycles. Our garbage collections "systems" should be designed for this case.
Cycles are a special case required for few data structures. They are not the norm and we shouldn't ship a huge heaping mess of a garbage collection system and make everything else slower to account for this rarely used special case.
Anyway people programming today shouldn't be thinking in terms of pointers and references. We should be thinking in terms of VALUES. Finite values have no cycles! The Haskell and C++ community have already embraced this, everyone else is still catching up.
Yet another reason why Java is a horrible language holding people back and the JVM is basically a hamster wheel keeping itself busy.