I had a VM heap size of 48M set on my Motorola Triumph, with the rationale that the large amount of memory on the phone would be more useful if garbage collection was minimized through a high heap size. Unfortunately, it seems that my logic backfired. I tested every setting again and it turns out that the 16M heap size works wonderfully without triggering as much obvious garbage collection. Apps and startup are drastically faster. The irony is that the default heap size is 32M, but I achieve the best performance with the same default from the original G1 of 16M.
Update: it seems that some apps crash if the heap size is too low. My phone ended up needing a data wipe when I set it back to 16 at one point and this caused a soft boot loop. Be careful. Apparently, Android has a serious problem where its memory usage bloats over time. After a wipe, my phone ran faster than I ever remember, and the 32M heap size didn’t slow anything down. The moral of the story is simple: if you are running Android older than ICS (4.x) and the unit runs slowly, try backing up your data and starting over. I think that’s ridiculous, but it works.