If you want to really look at what is going on in the VM memory you should use a good tool like VisualVM. This software is free and a great way to see what is going on.
Nothing is really "wrong" with explicit gc() calls. However, remember that when you call gc() you are "suggesting" that the garbage collector run. There is no guarantee that it will run at the exact time you run that command.