Thomas is right, but Java offers however several possibilities to control / tune garbage collection. See for instance http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Since your question starts with "Why" I assume you are looking for a reason.
The reason to have garbage collection usually given is to free programmers from having to think about when to release allocated memory. This allows them to spend more brain-cycles on solving domain problems.
Garbage collection typically does come at a price, in terms of performance. It is hard to give worst case execution bounds when a garbage collector is allowed to kick in at every moment. In view of the large numbers of errors made in C, C++ with hand-freed memory, losing this performance may not be such a bad trade. Admittedly, using a tool like Valgrind in combination with C,C++ can rid you of many memory issues.
Manual garbage collection which is allowed in c, can lead to problems in memory. Here the programmer has to be careful to check the reach-ability of the object/variable.
In case of JAVA, it is the job of JVM which checks the reach-ability of the objects and if it is unreachable, JVM can free that object by its own. It is not that we can not force JVM to do it.
Every class inherits finalize class implicitly, which calls the garbage collection mechanism at the end of the execution.
if you still want to force garbage collection on some variables/objects, you can make that variable/object NULL and then call System.gc() and Runtime.gc() functions.
This functions will remove all the variables/objects which are NULL and unreachable.
Note: But this will not guarantee of garbage collection of all the objects.
The idea of garbage collection is that you don't have to think about memory allocation anymore. This is why it does not make sense to give any control over it (other than capabilities to tell the GC to clean up now).
I don't really understand why you mention C and C++. These are languages that typically don't use garbage collection. Instead, the programmer has to explicitly manage memory. It is, however, possible to write a garbage collector for these languages. Maybe your wording is wrong. The reason why Java has chosen garbage collection for memory management is because it wanted to get rid of pointers and to prevent memory leaks.
This is one of the powerfulness of Java, so the developers don’t worry about the memory management overhead. By this, those developers are free from thinking about the actual physical overhead.
Therefore, thanks to Java for relieving us from thinking on the memory allocation!