O compilador Java (não a JVM) usa o código-fonte Java (que é essencialmente apenas 0s e 1s, mas um conjunto específico de 0s e 1s que pode representar informações fáceis para humanos para lidar com, texto legível) e compila para bytecode Java , que é 0 e 1 com um significado diferente.
O bytecode Java é conceitualmente como "assembler", exceto por serem instruções independentes de plataforma que devem ser interpretadas pela máquina virtual Java . A JVM atua como um "tradutor" entre o bytecode Java e o bytecode nativo (isto é, instruções de máquina para o hardware real em que está sendo executado) - conceitualmente o mesmo que, digamos, um emulador da Nintendo. É isso que permite que o Java compilado seja executado em qualquer plataforma.
Portanto, para responder à sua pergunta diretamente: A JVM não gera bytecode Java; o compilador Java faz, e a JVM interpreta o bytecode e "faz as coisas acontecerem".
No entanto, nos tempos modernos, as JVMs avançadas fazem mais do que apenas interpretar - a tecnologia "HotSpot" de que você pode ter ouvido, por exemplo, permite que a JVM determine dinamicamente quais partes de seu bytecode Java estão sendo executadas com freqüência poderia se beneficiar de uma aceleração) e, em seguida, pegar essas partes e traduzi-las para bytecode nativo completo em tempo real (para que o bytecode Java original não seja mais interpretado e o novo bytecode nativo mais rápido seja executado diretamente). Tudo isso acontece de forma transparente para o seu programa Java. Há muito tempo, Java costumava receber muitas críticas por ser "lento", mas esses dias acabaram com o advento do HotSpot e técnicas similares.Então, de certa forma, as JVMs modernas do geram "0s e 1s", pois geram código nativo adicional a partir das instruções de entrada de Java; mas seja cauteloso ao se referir a dados como "0s e 1s" - todo pedaço de dados digitais é "0s e 1s" (geralmente organizado em grupos de 8 dígitos binários chamados a "byte ), do código de máquina para programar código-fonte para texto para imagens para MP3s para qualquer coisa.
Você pode encontrar um bom resumo de como a JVM funciona aqui .
Para especificações muito concretas da linguagem Java, bytecode Java e como o compilador e a máquina virtual são obrigados a se comportar, tanto a especificação de linguagem quanto a de máquina virtual podem ser encontradas aqui .