...preallocating is a waste of memory and can even degrade performance
I don't talk about allocating unecessarly. And could you explain why for example EJB containers use pools of objects for bean instances? I think your argument defeats object cache concepts. Maybe you say that because hot spot would not have enough space to perform some optimizations?
Manual memory management really breaks everything java stands for
I agree with you but why for example most java game developers have to use JNI? It is generaly for performance reasons. So according to Java phylosophy, JNI is not acceptable because it breaks portability. Even worst, you have to bypass Java at some point by using another language! But developers use it because they have a good reason to do so.
if you don't allocate memory, you have switched off the GC anyway. It won't run.
Wrong, the garbage collector will continue to monitor objects in each generation of objects by checking the space allocated for each of those generations in the case they fill up the space (collections occur when there is no more space). And there are other optimization checks done by the garbage collector about the space of generations.