Try specifying a garbage collector manually.
Concurrent Mark Sweep is a good general purpose one that provides a good balance between low-pause and reasonable throughput.
If you are on Java 7 or later Java 6, G1 collector is probably better since it is able to also prevent memory fragmentation.
You can check the Java SE Hotspot Virtual Machine Garbage Collection Tuning page for more information and pointers 😀