Right, while deterministic GC is unsolvable (reduces to halting problem), the realistic goal is just to converge towards the same non-deterministic memory usage as well-designed manual memory management for the same application.
Through compile-time analysis and incremental GC methods, you can play with these space and time overheads and with their granularity.