JDK versus JRE

Entenda as diferenças fundamentais entre JRE e JDK, seus componentes e quando usar cada um no desenvolvimento e execução de aplicações Java.

Introdução: Dois Lados da Mesma Moeda

Uma das primeiras confusões que iniciantes em Java enfrentam é a diferença entre JRE e JDK. Ambos são essenciais para o ecossistema Java, mas servem a propósitos fundamentalmente diferentes. Compreender essa distinção é crucial para configurar corretamente seu ambiente de desenvolvimento e entender como as aplicações Java funcionam.

Vamos começar com uma analogia simples:

  • JRE é como o motorista que sabe dirigir um carro

  • JDK é como o mecânico que não só dirige, mas também constrói e conserta carros


Java Runtime Environment (JRE) Ambiente de Execução Java

O JRE é o ambiente necessário para executar aplicações Java. Se você apenas quer rodar programas Java (como um jogo, uma aplicação de desktop, ou um serviço web), o JRE é tudo que precisa. Ele fornece o "ambiente de execução" onde o código Java compilado pode ser executado.

Componentes do JRE

spinner

Explicação dos componentes:

  1. Java Virtual Machine (JVM) é o coração do JRE. É a JVM que:

    • Lê e interpreta o bytecode Java (arquivos .class)

    • Gerencia a memória através do Garbage Collector

    • Otimiza a execução com o compilador JIT (Just-In-Time)

    • Fornece a abstração de "escreva uma vez, execute em qualquer lugar"

  2. Class Loader (Carregador de Classes) é responsável por:

    • Carregar classes Java na memória quando são necessárias

    • Verificar a integridade do bytecode (segurança)

    • Gerenciar o namespace de classes para evitar conflitos

    • Implementar o mecanismo de delegação (hierarquia de class loaders)

  3. Bibliotecas Padrão (Java Class Libraries) é um conjunto abrangente de bibliotecas pré-compiladas que fornecem funcionalidades comuns:

    • java.lang: Classes fundamentais (String, Math, System, Object)

    • java.util: Coleções (List, Map, Set), datas, utilitários

    • java.io: Operações de entrada/saída (arquivos, streams)

    • java.net: Funcionalidades de rede

    • java.sql: Acesso a bancos de dados

    • E muitas outras (mais de 4.000 classes no total)

Quando Usar o JRE

  • Você é um usuário final que precisa executar uma aplicação Java

  • Você está em um ambiente de produção onde apenas a execução é necessária

  • Seu servidor precisa rodar aplicações Java (mas não desenvolvê-las)

  • Você está testando uma aplicação já compilada

Exemplo prático

Quando você instala o Minecraft (escrito em Java) no seu computador, você precisa do JRE para executá-lo, mas não precisa do JDK.


Java Development Kit (JDK) Kit de Desenvolvimento Java

O JDK é o pacote completo para desenvolver aplicações Java. Ele inclui o JRE e adiciona todas as ferramentas necessárias para criar, compilar, depurar e documentar código Java.

Componentes do JDK

spinner

Além do JRE, o JDK inclui:

  1. Compilador Java (javac): A ferramenta mais importante do JDK. Converte código-fonte Java (.java) em bytecode (.class).

  2. Ferramentas de Desenvolvimento:

    • java: O launcher de aplicações (também presente no JRE)

    • javadoc: Gera documentação automática a partir de comentários no código

    • jar: Cria e manipula arquivos JAR (Java ARchive)

    • jdb: Depurador Java

    • javap: Desmontador de bytecode (mostra o que está dentro de um .class)

  3. Utilitários Avançados:

    • jconsole: Monitoramento e gerenciamento de aplicações Java

    • jvisualvm: Análise de desempenho e profiling

    • jstack: StackTrace de threads em execução

    • jmap: Análise de uso de memória (heap dump)

  4. APIs de Desenvolvimento: Inclui ferramentas e APIs para desenvolvimento que não estão no JRE, como o compilador de anotações (javac -processor).

Quando Usar o JDK

  • Você é um desenvolvedor criando aplicações Java

  • Você precisa compilar código-fonte Java

  • Está depurando ou analisando aplicações Java

  • Precisa criar documentação automática para seu código

  • Está empacotando aplicações para distribuição

Exemplo prático

Quando você está escrevendo um programa Java no Eclipse, IntelliJ ou VS Code, você precisa do JDK instalado para compilar e testar seu código.


Comparação Direta: JRE versus JDK

Característica
JRE
JDK

Propósito

Executar aplicações Java

Desenvolver e executar aplicações Java

Tamanho

Menor (apenas runtime)

Maior (inclui ferramentas de desenvolvimento)

Contém JVM?

Sim

Sim (através do JRE incluso)

Contém compilador?

Não

Sim (javac)

Contém bibliotecas?

Bibliotecas de runtime

Bibliotecas de runtime + desenvolvimento

Para usuários finais?

Sim

Não (a menos que sejam desenvolvedores)

Para desenvolvedores?

Não (insuficiente)

Sim (essencial)

Relação de Inclusão

É importante entender que o JDK contém o JRE.

Quando você instala o JDK:

  1. Você obtém uma pasta jre dentro da instalação do JDK

  2. Todas as funcionalidades do JRE estão disponíveis

  3. Além disso, você ganha todas as ferramentas de desenvolvimento

Matematicamente: JDK = JRE + Ferramentas de Desenvolvimento


Evolução Histórica e Moderna

JDK 9 em Diante: A Modularização

A partir do Java 9, com a introdução do sistema de módulos (Project Jigsaw), a distinção JRE/JDK tornou-se menos rígida:

  1. JRE Tradicional Descontinuado: A Oracle parou de distribuir JREs separados para Java 11+

  2. jlink - Criando Runtimes Personalizados: Desenvolvedores podem agora criar suas próprias "JREs" personalizadas contendo apenas os módulos necessários para sua aplicação

  3. JDK como Runtime Único: Em muitos casos, apenas o JDK é distribuído, e os usuários finais recebem runtimes específicos da aplicação

Distribuições Modernas

Hoje em dia, você encontrará principalmente:

  • JDK Completo: Para desenvolvedores

  • JRE Embarcado/Personalizado: Para aplicações específicas (criadas com jlink)

  • Server JRE (Histórico): Uma variação otimizada para servidores (descontinuada)


Como Escolher e Instalar

Para Desenvolvedores

  1. Baixe e instale o JDK (OpenJDK, Oracle JDK, Amazon Corretto, etc.)

  2. Configure a variável de ambiente JAVA_HOME apontando para a pasta do JDK

  3. Adicione %JAVA_HOME%\bin (Windows) ou $JAVA_HOME/bin (Linux/macOS) ao seu PATH

Para Usuários Finais/Produção

  1. Se a aplicação fornecer um runtime próprio, use-o

  2. Caso contrário, você pode precisar instalar um JDK e usá-lo apenas como runtime

  3. Alternativamente, use distribuições que incluam um Java bundled

Verificando sua Instalação


Conclusão: Saber Escolher é Fundamental

Compreender a diferença entre JRE e JDK vai além de mera curiosidade técnica:

  1. Economia de Recursos: Em ambientes de produção com restrições de espaço, usar apenas o JRE (ou runtime personalizado) pode ser mais eficiente.

  2. Segurança: Instalar apenas o necessário (JRE para usuários finais) reduz a superfície de ataque.

  3. Desempenho: Runtimes personalizados (criados com jlink) podem ser menores e iniciar mais rápido.

  4. Manutenção Simplificada: Saber que o JDK já inclui tudo que o JRE oferece evita instalações duplicadas.

Para desenvolvedores iniciantes: instale o JDK. Ele contém tudo que você precisa para começar a programar em Java. Conforme você avança, entenderá quando e como criar runtimes específicos para suas aplicações, otimizando tamanho e desempenho.

Lembre-se: você desenvolve com o JDK, mas pode executar com o JRE (que já vem incluso no JDK). Essa compreensão clara pavimenta o caminho para um ambiente de desenvolvimento Java bem configurado e eficiente.

Last updated