C++ destruction is deterministic, garbage collection is not.
In C++ you can guarantee when destructors will be called, in Java there is no such guarantee at all. In fact, your destructors might never be called in Java.
solved What is the difference between Java Garbage collection and C++ object destruction? [closed]