Alguém pode me explicar por que as JVMs (eu não verifiquei muitas, mas nunca vi uma que não fizesse dessa maneira) precisam executar em um tamanho de heap fixo? Eu sei que é mais fácil implementar em um heap contíguo simples, mas a Sun JVM agora tem mais de uma década, então eu esperaria que eles tivessem tempo para melhorar isso.
A necessidade de definir o tamanho máximo de memória do seu programa no momento da inicialização parece algo da década de 1960, e existem as más interações com o gerenciamento de memória virtual do SO (GC recuperando dados trocados, incapacidade de determinar quanta memória o processo Java é realmente usando do lado do sistema operacional, enormes quantidades de espaço da VM desperdiçadas (eu sei, você não se importa com suas máquinas sofisticadas de 48 bits ...)). Também acho que as várias tristes tentativas de construir pequenos sistemas operacionais dentro da JVM (servidores de aplicativos EE, OSGi) são, pelo menos parcialmente, responsáveis por essa circunstância, porque a execução de vários processos Java em um sistema invariavelmente leva a desperdícios de recursos, porque é necessário dê a cada um deles a memória que ele pode ter para usar no pico.
Surpreendentemente, o Google não produziu as tempestades de indignação com isso que eu esperaria, mas elas podem ter sido enterradas sob os milhões de pessoas que descobriram sobre o tamanho fixo da pilha e aceitaram isso por um fato.