Fala, pessoal. Tudo certo? Hoje. trago um tópico importante para desenvolvedores Java. Esse assunto pode causar muita confusão não só em iniciantes, mas até em quem tem alguma experiência.
Então, qual seria esse tópico? Trata-se das diferenças entre JDK, JVM e JRE.
JRE: Java Runtime Enviroment
Primeiramente, falarei do JRE.
Como o nome indica, o JRE é um ambiente para o tempo de execução do Java. Portanto, nesse ambiente estão contidos o ClassLoader, o verificador de bytecode e o interpretador.
Vamos entender um pouco mais sobre cada um deles:
- ClassLoader: ele carrega as classes essenciais para a execução de um programa Java (somente quando necessárias) tornando, portanto, esse serviço sob demanda;
- Verificador de Bytecode: após o bytecode ser gerado pelo JDK(vamos ver à frente), ele é verificado para evitar problemas futuros no interpretador e também para não corromper nada do sistema;
- Interpretador: com o bytecode verificado, o interpretador utiliza a JVM(vamos ver à frente) para executar o código na respectiva máquina.
Em resumo, O JRE é o ambiente que traz o necessário para rodar código Java.
JVM: Java Virtual Machine
Depois de aprendermos que com o JRE verificamos o bytecode antes de passarmos para o interpretador que utiliza a JVM. Sabemos que, em seguida, a JVM será responsável por converter o bytecode em código de máquina e executá-lo. Concluímos então, que graças a JVM, podemos fazer programas escritos em Java rodarem em qualquer máquina.
Em síntese, essa máquina virtual Java, justamente por ser virtual, pode rodar seu código Java em qualquer máquina.
JDK: Java Development Kit
Quando nós somos os desenvolvedores, utilizamos o JDK para inicialmente compilar o nosso código e gerar o tal do bytecode. E ele, em seguida, vai passar pelo processo já discutido aqui.
Ou seja: o JDK contém um compilador , um depurador e o próprio JRE.
Além disso, é importante mencionar que o javac usado para compilar nosso código é provido pelo JDK.
Apanhado geral
Até agora, vimos resumidamente o que cada componente é. Portanto, abaixo apresento uma imagem para termos uma visão mais intuitiva:
Como podemos ver, tudo está contido no JDK, e dentro da JRE temos a JVM e o tudo mais que já mencionamos. Como resultado do exposto, esse é o passo a passo:
- Escrevemos o código;
- Compilamos com o javac do JDK;
- A JRE verifica o bytecode e carrega as classes básica da API do Java;
- A JVM interpreta o bytecode e o converte em código de máquina para execução.
Espero que agora o entendimento sobre as diferenças entre esses conceitos tenha ficado um pouco mais claro para vocês.
Até a próxima!