Bom dia, boa tarde e boa noite. Você provavelmente já ouviu falar que Java pode ser executada em qualquer plataforma. Esse é o famoso slogan dessa linguagem de programação de alto nível “Escreva uma vez, execute em qualquer lugar”.

Mas, você já parou para pensar como é feita essa proeza? É exatamente isso que veremos no decorrer desse artigo. Vem conferir!

Entendendo o conceito de WORA

WORA é o acrônimo de “Write once, run anywhere” ou “Escreva uma vez, execute em qualquer lugar” em português. Esse slogan, criado pela Sun MicroSystems – empresa fabricante de computadores e desenvolvedora de linguagem – explica exatamente o que estamos falando aqui: você pode escrever um código Java em qualquer sistema e ele funcionará em qualquer um que esteja habilitado para a linguagem.

Esse é um dos motivos pelo qual a linguagem teve e ainda tem tanto sucesso.

De acordo com o TIOBE index, atualmente, Java é a segunda linguagem mais utilizada por programadores no mundo.

Uma linguagem independente de plataforma

Mas vamos começar do começo. Para entender o que é uma linguagem independente de plataforma é preciso saber primeiramente o que, de fato, é uma plataforma. 

Uma plataforma, nesse contexto, é a combinação de um sistema operacional com um processador.

Por exemplo, o sistema operacional Windows utiliza o processador Intel, essa junção é o que chamamos de plataforma.

Outro exemplo é o sistema operacional Linux poder utilizar o processador AMD. Novamente, essa combinação é o que chamamos de plataforma.

Outro ponto que merece atenção é…

É necessário lembrar também que as máquinas entendem apenas machine code (código de máquina):

A linguagem de máquina inclui dígitos binários (0s e 1s), decimais hexadecimais e octal. É por isso que, como a linguagem de máquina é de difícil compreensão para nós, não escrevemos o código com ela diretamente.

Antigamente, na maioria das linguagens de programação, como, por exemplo C++, era feito o uso de um compilador ou intérprete para gerar um código em linguagem de máquina que será apenas utilizado em uma plataforma específica.

Isso acontece por inúmeros fatores e tem muito a ver com o hardware e os componentes internos da máquina, por exemplo.

O código de máquina para um processador de 32 bits geralmente não é executado em um processador de 64 bits, mesmo que seja do mesmo fabricante.

O fato de os conjuntos de instruções dos processadores serem tão diferentes e as chamadas de sistema também, é uma das razões pelas quais as linguagens independentes de plataforma são tão predominantes. E é aqui que entra o Java.

Ao compilar um programa escrito em C++ em uma máquina com sistema operacional Windows, um arquivo com código-fonte (source code) será gerado e vai traduzir o código “humano” para o código de máquina (0s e 1s). O problema aqui é que ele só vai rodar em outras máquinas cuja plataforma é a mesma. 

Ou seja, se você ao executar em outra plataforma – que tem um hardware diferente – e, por consequência entende o código máquina de forma diferente, uma mensagem de erro aparece e será necessário recompilar o código para que novo hardware entenda.

Essencialmente, você teria que criar várias versões do seu código-fonte para cada plataforma.

Java Virtual Machine

Você deve lembrar que para começar a programar em Java precisou fazer o download do JDK, JRE e JVM. Não entrarei em detalhes sobre o papel de cada um pois já existe um artigo aqui no blog da Cod3r que os descreve muito bem. Inclusive recomendo a leitura para aprofundar e consolidar o aprendizado.

Voltando então para o assunto, JVM é o acrônimo de Java Virtual Machine (Máquina Virtual Java). Ela é a responsável pela independência da plataforma da linguagem.

Com a JVM, o código “humano” não é convertido diretamente para um código que o hardware consiga entender, ele será convertido para uma forma intermediária de código chamada bytecode

O bytecode é uma ponte entre o texto que o programador consegue manipular e o código de máquina que o computador consegue executar. O arquivo bytecode que é gerado é interpretado pela JVM (Máquinas Virtuais Java) como vocês podem conferir na imagem abaixo:

Dessa forma, uma vez que o arquivo bytecode é gerado, ele pode ser executado em qualquer máquina que também tenha a JVM. Daí vem o princípio “Escreva uma vez, execute em qualquer lugar”.

Em outras palavras, ao escrever um código Java em um sistema operacional Windows, ele vai rodar em uma máquina com sistema operacional Mac, por exemplo, sem precisar ser reescrito, já que quem está interpretando o código não é a máquina com sistema Windows ou Mac diretamente, e sim a Máquina Virtual Java (JVM).

O bytecode acabou ficando popular com o Java, e mais tarde esse mesmo bytecode também passou a ser utilizado por outras “linguagens JVM”, como Kotlin, que também tem essa vantagem de poder ser transmitido em plataformas diferentes.

Conclusão e resumo

Nesse artigo, vimos que Java é independente de plataforma porque usa uma máquina virtual (JVM). O código escrito usando a linguagem de programação Java será portanto, compilado em bytecode, que são independentes de plataforma.

A JVM (Máquina Virtual Java) cuida das diferenças entre os bytecodes para as diferentes plataformas.

Veja também…

Boas práticas em Java e a sua importância

Aprendendo a Escrever “Olá Mundo” com Java sem Ponto e Vírgula