What I meant is that triggering garbage collection won't usually free any memory, as far as the OS is concerned. Java keeps it allocated for itself. There are some ways in hich java can decide to grow/shrink the heap (with some default+configurable minimum and maximum), but those don't even necessarily trigger on every GC, and you are likely to be as low as possible anyway.
And inside java itself, triggering GC shouldn't do anything interesting too - you are doing work that would have been done anyway, some time later.
The only reason I have ever found to trigger GC programatically is, when I want to measure memory actually allocated by "live" objects in the application - if you GC twice (which *should* trigger a full sweep), there will be no dead objects left in the heap, so you can "Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()" (you need to take this difference exactly because JVM might have decided to change total heap size - I remember a colleague being bewildered by free memory "going up" after allocating some objects ...).