How does memory management differ between a garbage-collected language like Java and a manual language like C++?