You can call it, but is not guarantee that memory will be freed. Furthermore, if the memory was released, this could have negative consequences for the execution of your program. I will try to explain it to you, but I noticed you that my english is not very good XD
Java heap memory is divided in three zones based on objects generations. Oversimplifying: young, adult and old. When occur an invocation to GC, first it do is to check "young zone" for unused objects and liberate them. If GC doesn't free enought memory in the "young zone", it examine "adult zone". If GC doesn't free enought memory in the "adult zone", it examine the "old zone". Each generation is more costly for examine by GC than the last.
Well, objects are initialy created in young zone, if GC perform an execution in the young zone and the object is still used, that object pass to adult zone. Idem for adult -> old zones. If you invoke an execution of GC, it can think that an young object is candidate for adult object, and move it to adult zone. This causes your adult zone grows in an unnecesary way. Later, when GC have to examine adult zone, the operation is more costly for him, and your program performance can go down.