Não sei as reais razões, não estando de forma alguma envolvido na implementação da JVM, mas posso pensar em algumas plausíveis:
- A ideia do Java é ser uma linguagem de escrita uma vez executado em qualquer lugar, e colocar coisas pré-compiladas no arquivo de classe é meio que violar isso (apenas "mais ou menos" porque é claro que o código de bytes real ainda estaria lá)
- Isso aumentaria os tamanhos dos arquivos de classe porque você teria o mesmo código lá várias vezes, especialmente se acontecer de você executar o mesmo programa em várias JVMs diferentes (o que não é realmente incomum, quando você considera versões diferentes como JVMs diferentes, o que você realmente tem que fazer)
- Os arquivos de classe em si podem não ser graváveis (embora seja muito fácil verificar isso)
- As otimizações JVM são parcialmente baseadas em informações de tempo de execução e em outras execuções podem não ser tão aplicáveis (embora ainda devam fornecer algum benefício)
Mas eu realmente estou supondo, e como você pode ver, eu realmente não acho que nenhuma das minhas razões seja um obstáculo. Eu acho que a Sun simplesmente não considera esse suporte como uma prioridade, e talvez meu primeiro motivo esteja próximo da verdade, já que fazer isso normalmente também pode levar as pessoas a pensar que os arquivos de classe Java realmente precisam de uma versão separada para cada VM em vez de ser plataforma cruzada.
Minha forma preferida seria ter um tradutor separado de bytecode para nativo que você pudesse usar para fazer algo assim explicitamente de antemão, criando arquivos de classe que são explicitamente construídos para uma VM específica, possivelmente com o bytecode original neles para que você pode ser executado com diferentes VMs também. Mas isso provavelmente vem da minha experiência: tenho feito principalmente Java ME, onde realmente dói que o compilador Java não seja mais inteligente sobre compilação.