Tuning your heap is dependent on the virutal machine you are using. A rule of thumb with heap size is to give the app server as much memory as you can afford to give it :)
Tuning garbage collection is JVM dependent. If you are using Sun's 1.3.1, there is a tuning doc at the following URL:
But to summarize, in an enterprise environment, increase you young generation size to a little less than half the heap size - and increase your survivor spaces to somewhere around 1/8th of the young generation (SurvivorRatio=6)..
The optimal setting will be dependent on your application and your use of memory, but this is a good starting point