Learn · concepts

O que é a JVM? Máquina Virtual Java Explicada

A JVM executa bytecode Java em qualquer sistema operacional. É por isso que Minecraft Java Edition e cada mod do Fabric funcionam da mesma forma no Windows, macOS e Linux.

TRtrolPublished 5 min read

O que é a JVM?

A JVM, ou Máquina Virtual Java, é o programa que executa código Java. Você escreve em Java, um compilador o converte em bytecode e a JVM executa esse bytecode em qualquer sistema operacional. É por isso que o Minecraft Java Edition e os mods criados para ele se comportam da mesma forma no Windows, macOS e Linux sem a necessidade de recompilação. A JVM é a camada de abstração que torna "escreva uma vez, execute em qualquer lugar" uma realidade, e não apenas um slogan de marketing.

O que a JVM realmente faz

A JVM executa bytecode, não código-fonte. Ao compilar um programa Java, você não obtém um executável do Windows ou do macOS. Você obtém arquivos de classe cheios de bytecode, um conjunto de instruções compacto que a JVM entende. A JVM lê essas instruções e as executa na sua máquina.

Essa camada extra é o ponto. O mesmo bytecode funciona em qualquer lugar onde uma JVM exista, então "escreva uma vez, execute em qualquer lugar" é a versão resumida de por que o Java se espalhou tão amplamente. A JVM é a parte que torna essa promessa verdadeira. Um arquivo JAR de mods do Fabric funciona da mesma forma, seja o jogador no Windows, macOS ou Linux, porque todos estão executando o mesmo bytecode através da mesma JVM, e a JVM lida com as diferenças de hardware

JVM, JRE e JDK

Estes três termos são frequentemente confundidos, então aqui está a distinção.

TermoO que éQuando precisa
JVMO motor que executa bytecodeSempre, para executar qualquer programa Java
JREA JVM mais as bibliotecas padrãoPara executar programas Java
JDKA JRE mais o compilador e as ferramentas de desenvolvimentoPara construir programas Java

Um jogador precisa apenas de um ambiente de execução para lançar o jogo. Um desenvolvedor que está criando uma modificação precisa do JDK completo para poder compilar Java em bytecode em primeiro lugar

Como a JVM executa seu código rapidamente

A JVM começa interpretando bytecode instrução por instrução. Enquanto executa, monitora quais métodos são chamados com mais frequência. Esses caminhos "quentes" são entregues ao compilador JIT, que os transforma em código de máquina nativo em tempo real. Após o período de aquecimento, o código mais utilizado roda a uma velocidade próxima à nativa. É por isso que o Minecraft parece lento nos primeiros segundos e depois se estabiliza: o JIT está trabalhando em segundo plano.

A JVM também gerencia a memória para você. Um coletor de lixo recupera os objetos que você não utiliza mais, então você não precisa liberar a memória manualmente, como faria em C. Essa é uma das razões pelas quais o Java é fácil de escrever e uma linguagem comum para os primeiros passos de modders. O gerenciamento de memória é integrado.

Por que isso importa para o Minecraft

A versão Java do Minecraft roda na JVM, e assim fazem todas as ferramentas, clientes e mods que o visam. O código de um cliente pode ser Java, Kotlin ou outra linguagem da JVM, porque todos compilam para o mesmo bytecode que a JVM executa. Um mod Fabric é enviado como um arquivo jar de bytecode, o carregador o conecta ao jogo na inicialização e a JVM executa tudo como um único processo.

É por isso também que os launchers permitem ajustar coisas como o tamanho do heap e qual versão do Java usar. Você está configurando a JVM que hospeda o jogo, não o jogo em si. Dar mais memória à JVM significa que o Minecraft tem mais espaço para trabalhar. Escolher uma versão mais recente do Java pode proporcionar melhorias de velocidade, já que as JVMs mais recentes frequentemente otimizam melhor os caminhos de código quentes.

FAQ