JDK, JRE e JVM Explicados: Diferenças-Chave e Como Funcionam Juntos
O que é o Java Development Kit (JDK)?
O JDK é um kit de ferramentas abrangente que permite desenvolvedores escrever, compilar, depurar e executar aplicações Java. Ele vem com o compilador Java (javac), bibliotecas de classes centrais e uma suíte de ferramentas de desenvolvimento como debugger e JavaDoc. O kit está disponível para Windows, macOS, Linux e Solaris, e múltiplas versões podem coexistir na mesma máquina.
O que é o Java Runtime Environment (JRE)?
O JRE é o pacote de runtime que permite a um computador executar programas Java. Ele agrupa a Java Virtual Machine (JVM), bibliotecas centrais e arquivos de suporte. Não-desenvolvedores que apenas precisam rodar aplicações Java podem instalar o JRE em vez do JDK completo.
O que é a Java Virtual Machine (JVM)?
A JVM é o motor que interpreta ou compila just-in-time bytecode Java em linguagem de máquina nativa. É o núcleo da plataforma Java, fornecendo execução independente de plataforma, gerenciamento de memória e segurança.
Por que Usar o JDK?
- Inclui compilador, debugger e launcher necessários para construir aplicações Java.
- Permite desenvolvedores gerar bytecode que roda em qualquer JVM.
- Fornece ferramentas para ajuste de performance, análise de código e documentação.
Por que Usar o JRE?
- Oferece ambiente pronto para uso para rodar aplicações Java sem o overhead de ferramentas de desenvolvimento.
- Contém o conjunto completo de bibliotecas centrais requeridas pela maioria dos programas Java.
- Ideal para usuários finais que apenas precisam rodar, não desenvolver, software Java.
Por que Usar a JVM?
- Roda bytecode Java em qualquer plataforma que tenha uma JVM compatível, realizando a promessa do Java "write once, run anywhere".
- Possui compilador Just-In-Time (JIT) que otimiza performance em runtime.
- Gerencia alocação de memória, coleta de lixo e verificações de segurança.
Principais Recursos do JDK
- Suíte completa de ferramentas de desenvolvimento: compilador, debugger, JavaDoc e mais.
- Suporta recursos modernos da linguagem como operador diamante (
<>) para generics. - Multiplataforma: instale no Windows, macOS, Linux ou Solaris.
- Inclui todos os componentes do JRE, tornando-o um superconjunto.
Principais Recursos do JRE
- Contém a JVM e bibliotecas de classes centrais necessárias para rodar aplicações Java.
- Fornece tecnologias de deployment como Java Web Start e Java Plug-in.
- Inclui APIs de rede e banco de dados como JDBC, RMI e JNDI.
- Exclui ferramentas de desenvolvimento, mantendo o pacote leve.
Principais Recursos da JVM
- Interpreta bytecode ou compila com JIT para execução eficiente.
- Gerencia memória, coleta de lixo e políticas de segurança.
- Oferece arquitetura flexível: class loader, method area, heap e stacks.
- Agnóstica de hardware: o mesmo bytecode roda em qualquer plataforma com JVM compatível.
Como o JDK Funciona
O JDK integra o JRE e adiciona ferramentas de desenvolvimento. Desenvolvedores escrevem código, javac compila para bytecode, e o launcher Java (java) inicia a JVM para executar o programa.
Como o JRE Funciona
O JRE contém a JVM, class loaders e as bibliotecas de runtime. Quando um programa é iniciado, a JVM carrega classes, verifica bytecode e o executa via interpretador ou compilador JIT.
Como a JVM Funciona
Os componentes centrais da JVM incluem:
- Class Loader: Carrega, linka e inicializa arquivos de classe.
- Method Area: Armazena estruturas de classe, variáveis estáticas e bytecode de métodos.
- Heap: Mantém objetos e arrays compartilhados entre threads.
- Java Stacks: Armazena variáveis locais e frames de método para cada thread.
- PC Registers: Rastreia a instrução atual para cada thread.
- Execution Engine: Executa bytecode, usando JIT para compilar hot spots.
- Native Method Interface & Libraries: Permite integração com código nativo.
Comparando JDK, JRE e JVM
| Componente | Forma Completa | Propósito | Dependência de Plataforma | Ferramentas Incluídas |
|---|---|---|---|---|
| JDK | Java Development Kit | Ambiente completo de desenvolvimento para aplicações Java. | Dependente de plataforma | Compilador, debugger, JavaDoc e mais. |
| JRE | Java Runtime Environment | Roda aplicações Java fornecendo bibliotecas centrais e a JVM. | Dependente de plataforma | Nenhuma (apenas runtime) |
| JVM | Java Virtual Machine | Executa bytecode Java; fornece runtime independente de plataforma. | Dependente de plataforma (implementação varia) | Nenhuma (apenas motor de execução) |
Java
- Entendendo Java: JDK, JRE e JVM Explicados
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Java 10: Repositório Unificado da Floresta JDK
- Java 10: Handshakes Thread-Local para Safepoints VM Mais Rápidos
- Dominando Logging em Java: Práticas Essenciais para Código Confiável